Log do JPA [RESOLVIDO]

Bom dia.

Eu estou desenvolvendo um aplicativo que utiliza JPA e no momento de mandar o comando:

Está retornando as validações e, em um certo momento, dá a seguinte mensagem:

26/09/2011 08:34:35 org.hibernate.cfg.annotations.EntityBinder bindTable INFO: Bind entity br.com.santosbrasil.persistencia.jpa.mnft.cuscar.entidade.ContainerCuscar on table CNTR_CUSCAR [PersistenceUnit: TESTE.LOCAL.MNFT] Unable to configure EntityManagerFactory

Só que não me reporta o que aconteceu de errado. A Exception retorna null.

Como faço para conseguir o retorno do que o JPA está reclamando?

não sei exatamente se tem como fazer logar um erro mais especifico, mas se você postar seu persistence.xml (e a localização dele) talvez alguém possa te informar o que está errado.

use try/catch e veja o stacktreace…

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<persistence version=“2.0” xmlns=“http://java.sun.com/xml/ns/persistence” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd”>

<persistence-unit name=“TESTE.LOCAL.MNFT” transaction-type=“RESOURCE_LOCAL”>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>…</class>
<properties>
<property name=“hibernate.cache.provider_class” value=“org.hibernate.cache.NoCacheProvider”/>
<property name=“hibernate.show_sql” value=“true”/>
<property name=“hibernate.format_sql” value=“true”/>
<property name=“hibernate.connection.username” value=“"/>
<property name=“hibernate.connection.driver_class” value=“oracle.jdbc.OracleDriver”/>
<property name=“hibernate.connection.password” value="
”/>
<property name=“hibernate.connection.url” value=“jdbc:oracle:thin:@MNFT:MNFTD”/>
<property name=“hibernate.hbm2ddl.auto” value=“update”/>
</properties>
</persistence-unit>
</persistence>[/code]

O problema é que não retorna um erro. Ele retorna null direto.

O getMessage() da exeption?

Isso mesmo. Na verdade, ele não entra no catch.

JPA lança unchecked exceptions…vc ta fez o try/catch adequado?

Estou pedindo para ele me retornar o tipo Exception.
Segue o código:

public static EntityManager getEntityManager( Local local, Banco banco, Ambiente ambiente) { try { return Persistence.createEntityManagerFactory( getAmbiente(banco,local,ambiente) ).createEntityManager(); }catch (Exception e) { System.out.println(e.getMessage()); return null; } }

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<persistence version=“2.0” xmlns=“http://java.sun.com/xml/ns/persistence” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd”>

<persistence-unit name=“TESTE.LOCAL.MNFT” transaction-type=“RESOURCE_LOCAL”>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>…</class>
<properties>
<property name=“hibernate.cache.provider_class” value=“org.hibernate.cache.NoCacheProvider”/>
<property name=“hibernate.show_sql” value=“true”/>
<property name=“hibernate.format_sql” value=“true”/>
<property name=“hibernate.connection.username” value=“"/>
<property name=“hibernate.connection.driver_class” value=“oracle.jdbc.OracleDriver”/>
<property name=“hibernate.connection.password” value="
”/>
<property name=“hibernate.connection.url” value=“jdbc:oracle:thin:@MNFT:MNFTD”/>
<property name=“hibernate.hbm2ddl.auto” value=“update”/>
</properties>
</persistence-unit>
</persistence>[/code]

O problema é que não retorna um erro. Ele retorna null direto.[/quote]

você ja chegou a testar se consegue conectar com estas mesmas configurações de alguma outra forma (com um hibernate.properties mesmo ou via jdbc)?

me confirma uma coisa, você está em uma aplicação stand alone? só por testar, te diria para testar sem o transaction-type, se sua aplicação estiver em um ejb container, ai então acredito que você vai precisar da tag non-jta-datasource (acho que é isso).

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<persistence version=“2.0” xmlns=“http://java.sun.com/xml/ns/persistence” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd”>

<persistence-unit name=“TESTE.LOCAL.MNFT” transaction-type=“RESOURCE_LOCAL”>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>…</class>
<properties>
<property name=“hibernate.cache.provider_class” value=“org.hibernate.cache.NoCacheProvider”/>
<property name=“hibernate.show_sql” value=“true”/>
<property name=“hibernate.format_sql” value=“true”/>
<property name=“hibernate.connection.username” value=“"/>
<property name=“hibernate.connection.driver_class” value=“oracle.jdbc.OracleDriver”/>
<property name=“hibernate.connection.password” value="
”/>
<property name=“hibernate.connection.url” value=“jdbc:oracle:thin:@MNFT:MNFTD”/>
<property name=“hibernate.hbm2ddl.auto” value=“update”/>
</properties>
</persistence-unit>
</persistence>[/code]

O problema é que não retorna um erro. Ele retorna null direto.[/quote]

você ja chegou a testar se consegue conectar com estas mesmas configurações de alguma outra forma (com um hibernate.properties mesmo ou via jdbc)?

me confirma uma coisa, você está em uma aplicação stand alone? só por testar, te diria para testar sem o transaction-type, se sua aplicação estiver em um ejb container, ai então acredito que você vai precisar da tag non-jta-datasource (acho que é isso).[/quote]

Não testei.
Essa aplicação não necessita de nenhuma tela. É um tipo de aplicação de roda em background (processamento de arquivos txt).

Deixa eu aproveitar a deixa… Eu consigo, no mesmo persistence.xml, mapear vários bancos e várias entidades? Se eu quiser fazer um projeto somente com a camada de persistência, eu consigo?

Pergunto isso pois meu XML estava em um projeto a parte do principal. Trouxe as entidades, daos e o xml para o projeto principal e funcionou…

Existem algumas exceptions q não é necessário ter um texto, uma vez que o tipo ja se refere ao problema…
Qual é a tipo de excetion então?

Seguindo o problema acima, vi que eu estava com o login bloqueado para este banco. Mas a exception não me retornou login negado. Simplesmente retornou:

Agora, tenho outro problema mas o stacktrace não me informa nada (log do netbeans).

veja o tipo da exception!!!

Não retorna exception.

[quote=gsfteodoro]
Deixa eu aproveitar a deixa… Eu consigo, no mesmo persistence.xml, mapear vários bancos e várias entidades? Se eu quiser fazer um projeto somente com a camada de persistência, eu consigo?

Pergunto isso pois meu XML estava em um projeto a parte do principal. Trouxe as entidades, daos e o xml para o projeto principal e funcionou…[/quote]

você pode deixar em um jar separado sim e cada banco deverá ser um persistence-unit (sim, pode ter vários).

[quote=gsfteodoro]Seguindo o problema acima, vi que eu estava com o login bloqueado para este banco. Mas a exception não me retornou login negado. Simplesmente retornou:

Agora, tenho outro problema mas o stacktrace não me informa nada (log do netbeans).[/quote]

você está colocando a parte que cria o entity manager factory dentro de um try catch? essa abaixo:

no seu catch você está tratando quais exceções? (dica, coloque um catch(Throwable) para pegar qualquer exceção, coloque um System.out no final do try e de cada catch para ver oq ue aparece).

você disse que tem um problema mas não tem o stack, qual a mensagem desse problema? qual o erro?

Todos os provedores que eu usei de JPA, sempre geraram exceptions não checadas quando alguma coisa tava errado no ORM.
Muito estranho isso?
Qual é seu provedor?
Vc tem certeza q não ta comendo essa exception ai?

Gostei da dica do catch(Throwable). Eu desconhecia.

Consegui acertar o acesso e estou recebendo os logs.

Com o catch(Exception), não retornava erro algum.

Agora, estou com uma dúvida em relação a gravar os dados. Eu abro um novo tópico ou posso prosseguir neste mesmo?
Pergunto isso por questão de futura pesquisa.

não vejo nada de errado em deixar aqui mesmo a duvida…

Então lá vai a dúvida:
Criei uma sequence através da anotação. Segue um exemplo:

@SequenceGenerator(name="SEQ_CONTRA_MARCA_CUSCAR",sequenceName="SEQ_CONTRA_MARCA_CUSCAR",allocationSize=1,initialValue=1)
Porém, a conexão de banco de dados está para outro esquema (banco oracle). Para a tabela, na anotação @Table, existe a propriedade schema. Como faço para alterar o esquema da sequence?

Respondendo a minha questão, para que seja colocado a sequence no schema correto, somente necessita inserir o nome do schema na frente da sequenceName, separando-os por um ponto.
Exemplo:

@SequenceGenerator(name="SEQ_CONTRA_MARCA_CUSCAR",sequenceName="SEQ_CONTRA_MARCA_CUSCAR",allocationSize=1,initialValue=1)

Ficaria:

@SequenceGenerator(name="SEQ_CONTRA_MARCA_CUSCAR",sequenceName="CUSCAR.SEQ_CONTRA_MARCA_CUSCAR",allocationSize=1,initialValue=1)