Log do JPA [RESOLVIDO]

19 respostas
gsfteodoro

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?

19 Respostas

maior_abandonado

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.

FernandoFranzini

use try/catch e veja o stacktreace…

gsfteodoro
maior_abandonado:
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.
<?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>
FernandoFranzini:
use try/catch e veja o stacktreace....

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

FernandoFranzini

O getMessage() da exeption?

gsfteodoro

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

FernandoFranzini

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

gsfteodoro

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; } }

maior_abandonado
gsfteodoro:
maior_abandonado:
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.
<?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>
FernandoFranzini:
use try/catch e veja o stacktreace....

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

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).

gsfteodoro
maior_abandonado:
gsfteodoro:
maior_abandonado:
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.
<?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>
FernandoFranzini:
use try/catch e veja o stacktreace....

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

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).

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...

FernandoFranzini

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?

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).

FernandoFranzini

veja o tipo da exception!!!

gsfteodoro

Não retorna exception.

maior_abandonado

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…

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

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).

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?

FernandoFranzini

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?

gsfteodoro

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.

maior_abandonado

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

gsfteodoro

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?

gsfteodoro

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)

Criado 26 de setembro de 2011
Ultima resposta 29 de set. de 2011
Respostas 19
Participantes 3