GARANTIR DESCONTO

Fórum Problema no persistence unit #399985

29/04/2011

0

Olá Pessoal! 
Estou com um grande problema em um projeto web, quando crio uma classe entity automática no netbeans e criando uma conexao com o postgresql e depois vou no persistence.xml e vejo que ele nao criou os property do banco de dados da conexão que deveria ter, já procurei fazer todos os tipos de testes e nada, estou usando o netbeans 7 glassfish 3.1 jsf 2.0 e Hibernate , o problema é que quando persisto um dado ele não encontra o banco gerando essa mensagem,
javax.persistence.PersistenceException: [PersistenceUnit: ab] Unable to build EntityManagerFactory 

vcs teriam ideia do que seja?? 
Lembrando estou utilizando o NetBeans 7GlassFish 3.1Jsf 2.0HibernateJPA 1

Agradeço
Jefferson Alves

Jefferson Alves

Responder

Posts

29/04/2011

Anthony Accioly

Olá Jefferson,
Você poderia postar o seu persistence.xml?
Há dois tipos de configuração possíveis: 
Apontar o endereço JNDI de um datasource configurado no Glassfish (veja que nesse caso você não precisa especificar detalhes de conexão com o banco pois o próprio server já as contém):
<persistence 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"             version="2.0">   <persistence-unit name="sample">      <jta-data-source>java:/DefaultDS</jta-data-source>      <properties>         <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>         <property name="hibernate.hbm2ddl.auto" value="create-drop"/>      </properties>   </persistence-unit></persistence>

Ou configurar diretamente o detalhes do banco no persistence.xml:
<persistence>   <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">      <class>org.hibernate.ejb.test.Cat</class>      <class>org.hibernate.ejb.test.Distributor</class>      <class>org.hibernate.ejb.test.Item</class>      <properties>         <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>         <property name="javax.persistence.jdbc.user" value="sa"/>         <property name="javax.persistence.jdbc.password" value=""/>         <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:."/>         <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/         <property name="hibernate.max_fetch_depth" value="3"/>                <!-- cache configuration -->         <property name="hibernate.ejb.classcache.org.hibernate.ejb.test.Item" value="read-write"/>         <property name="hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors" value="read-write, RegionName"/>
         <!-- alternatively to <class> and <property> declarations, you can use a regular hibernate.cfg.xml file -->         <!-- property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/hibernate.cfg.xml"/ -->      </properties>   </persistence-unit></persistence>

Enquanto o primeiro tipo de configuração te trás uma série de vantagens (transações controladas por container, não precisar mexer no arquivo de configuração da aplicação para mudar de ambiente de desenvolvimento para produção, etc). O segundo te dá mais controle (e históricamente é mais fácil de testar... Você não irá precisar recorrer a containers embbeded e coisas do tipo). 
Exemplos retirados daqui: http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/configuration.html
Responder

Gostei + 0

29/04/2011

Jefferson Alves

Olá Anthony Accioly, 
Olha meu persistence.xml
<?xml version="1.0" encoding="UTF-8"?><persistence version="1.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_1_0.xsd">  <persistence-unit name="TreinamentoPU" transaction-type="JTA">    <provider>org.hibernate.ejb.HibernatePersistence</provider>    <jta-data-source>treinamento</jta-data-source>    <exclude-unlisted-classes>false</exclude-unlisted-classes>    <properties>      <property name="hibernate.hbm2ddl.auto" value="update"/>    </properties>  </persistence-unit></persistence>

inseri os dois códigos e me retorna o seguinte erro:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)        at javax.naming.InitialContext.lookup(InitialContext.java:392)        at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)        at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)        at br.pb.sistcomp.util.HibernateUtil.(HibernateUtil.java:21)        at br.pb.sistcomp.util.HibernateUtil.getInstance(HibernateUtil.java:26)        at br.pb.sistcomp.dao.LeilaoDaoImpl.(LeilaoDaoImpl.java:20)        at test.Test.main(Test.java:19)Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: sample] Unable to build EntityManagerFactory        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)        at br.pb.sistcomp.util.HibernateUtil.(HibernateUtil.java:21)        at br.pb.sistcomp.util.HibernateUtil.getInstance(HibernateUtil.java:26)        at br.pb.sistcomp.dao.LeilaoDaoImpl.(LeilaoDaoImpl.java:20)        at test.Test.main(Test.java:19)Caused by: org.hibernate.HibernateException: Could not find datasource        at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:56)        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)        at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)        ... 7 moreCaused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)        at javax.naming.InitialContext.lookup(InitialContext.java:392)        at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)        ... 14 more
É como se o meu EntityManagerFactory não sincronizasse com persistence.xml, até pq como vc viu meu persistence.xml não gera a sincronização com o banco, eu crio esse persistence.xml e faço as configurações do banco, mas mesmo ele gera o que está acima.
Responder

Gostei + 0

29/04/2011

Anthony Accioly

Você está rodando esse projeto no Glassfish? Esse erro acontece durante o deploy? Esse endereço do datasource treinamento existe e está exatamente nesse formado no Glassfish?
Tenta a segunda opção que eu te mandei para configurar o banco na unha através da aplicação.
Abraços,
Responder

Gostei + 0

29/04/2011

Jefferson Alves

Oi Anthony Accioly,
Exatamento estou rodando no glassfish 3.1, e o meu banco é o postgresql está bem configurando, já fiz um teste utilizando o tomcat e rodou normalmente, juro que não sei o que fazer para solucionar esse bug, fiz os testes que você e mesmo assim está dando erro.
Esse erro acontece quando tento persistir algo no banco.
Como falei uso as mesmas clases em outro projeto utilizando o tomcat e roda normalmente.
Aguardo.

Responder

Gostei + 0

29/04/2011

Anthony Accioly

Jefferson, 

Tente especificar os dados do banco diretamente no persistence.xml como no segundo exemplo de código que te passei. Se continuar me dando erro, posta ele aqui.
Abraços,
Responder

Gostei + 0

29/04/2011

Anthony Accioly

E outra coisa,
Quando você diz que está bem configurado, você colocou o driver do banco na pasta lib do glassfish,entrou no console do Glassfish, configurou o datasource e fez um teste de ping né? Depois configurou o acesso via JNDI e testou o acesso direto? Consegue acessar o datasource diretamente via JNDI usando
context.lookup()
?Veja esse tutorial aqui: http://www.albeesonline.com/blog/2008/08/06/creating-and-configuring-a-mysql-datasource-in-glassfish-application-server/
Responder

Gostei + 0

29/04/2011

Jefferson Alves

<persistence xmlns="http://java.sun.com/xml/ns/persistence">  <persistence-unit name="treinamentoPU" transaction-type="RESOURCE_LOCAL">    <properties>      <property name="hibernate.connection.username" value="desenv"/>      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>      <property name="hibernate.connection.password" value="desenv"/>      <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/treinamento"/>      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>      <property name="hibernate.hbm2ddl.auto" value="update"/>      <!-- cache configuration -->      <property name="hibernate.ejb.classcache.org.hibernate.ejb.test.Item" value="read-write"/>      <property name="hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors" value="read-write, RegionName"/>      <!-- alternatively to <class> and <property> declarations, you can use a regular hibernate.cfg.xml file -->      <!-- property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/hibernate.cfg.xml"/ -->    </properties>  </persistence-unit></persistence>


error
run:Apr 29, 2011 8:19:13 PM org.hibernate.cfg.annotations.Version <clinit>INFO: Hibernate Annotations 3.3.1.GAApr 29, 2011 8:19:13 PM org.hibernate.cfg.Environment <clinit>INFO: Hibernate 3.2.5Apr 29, 2011 8:19:13 PM org.hibernate.cfg.Environment <clinit>INFO: hibernate.properties not foundApr 29, 2011 8:19:13 PM org.hibernate.cfg.Environment buildBytecodeProviderINFO: Bytecode provider name : cglibApr 29, 2011 8:19:13 PM org.hibernate.cfg.Environment <clinit>INFO: using JDK 1.4 java.sql.Timestamp handlingApr 29, 2011 8:19:13 PM org.hibernate.ejb.Version <clinit>INFO: Hibernate EntityManager 3.3.2.GAApr 29, 2011 8:19:13 PM org.hibernate.cfg.AnnotationBinder bindClassINFO: Binding entity from annotated class: br.pb.sistcomp.entity.MensagemApr 29, 2011 8:19:13 PM org.hibernate.cfg.annotations.EntityBinder bindTableINFO: Bind entity br.pb.sistcomp.entity.Mensagem on table MensagemApr 29, 2011 8:19:13 PM org.hibernate.cfg.AnnotationBinder bindClassINFO: Binding entity from annotated class: br.pb.sistcomp.entity.ProdutoApr 29, 2011 8:19:13 PM org.hibernate.cfg.annotations.EntityBinder bindTableINFO: Bind entity br.pb.sistcomp.entity.Produto on table ProdutoApr 29, 2011 8:19:13 PM org.hibernate.cfg.AnnotationBinder bindClassINFO: Binding entity from annotated class: br.pb.sistcomp.entity.PessoaApr 29, 2011 8:19:13 PM org.hibernate.cfg.annotations.EntityBinder bindTableINFO: Bind entity br.pb.sistcomp.entity.Pessoa on table PessoaApr 29, 2011 8:19:13 PM org.hibernate.cfg.AnnotationBinder bindClassINFO: Binding entity from annotated class: br.pb.sistcomp.entity.VendaApr 29, 2011 8:19:13 PM org.hibernate.cfg.annotations.EntityBinder bindTableINFO: Bind entity br.pb.sistcomp.entity.Venda on table VendasApr 29, 2011 8:19:13 PM org.hibernate.cfg.AnnotationBinder bindClassINFO: Binding entity from annotated class: br.pb.sistcomp.entity.LanceApr 29, 2011 8:19:13 PM org.hibernate.cfg.annotations.EntityBinder bindTableINFO: Bind entity br.pb.sistcomp.entity.Lance on table LanceApr 29, 2011 8:19:13 PM org.hibernate.cfg.AnnotationBinder bindClassINFO: Binding entity from annotated class: br.pb.sistcomp.entity.LeilaoApr 29, 2011 8:19:13 PM org.hibernate.cfg.annotations.EntityBinder bindTableINFO: Bind entity br.pb.sistcomp.entity.Leilao on table leiloesException in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: treinamentoPU] Unable to configure EntityManagerFactory at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:265) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:125) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at br.pb.sistcomp.util.HibernateUtil.<init>(HibernateUtil.java:21) at br.pb.sistcomp.util.HibernateUtil.getInstance(HibernateUtil.java:26) at br.pb.sistcomp.dao.LeilaoDaoImpl.<init>(LeilaoDaoImpl.java:20) at test.LeilaoTest.main(LeilaoTest.java:19)Caused by: org.hibernate.MappingException: Cannot cache an unknown entity: org.hibernate.ejb.test.Item at org.hibernate.cfg.Configuration.setCacheConcurrencyStrategy(Configuration.java:1959) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:293) at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115) at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1225) at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:159) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:854) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:191) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:253) ... 7 moreJava Result: 1BUILD SUCCESSFUL (total time: 1 second)
Classe Hibernate Util
package br.pb.sistcomp.util;
import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;//import javax.persistence.Persistence;
/** * * @author georgelima1 */public class HibernateUtil {    private static HibernateUtil hu;    private static EntityManagerFactory emf;
    private HibernateUtil(){       emf = Persistence.createEntityManagerFactory("treinamentoPU");    }
    public static HibernateUtil getInstance(){        if(hu == null){            hu = new HibernateUtil();            return hu;        }        return hu;    }
    public EntityManagerFactory getFactory(){        return emf;    }
}

Classe LeilaoDao
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package br.pb.sistcomp.dao;
import br.pb.sistcomp.entity.Leilao;import java.util.List;import javax.persistence.EntityManager;import br.pb.sistcomp.util.HibernateUtil;import java.util.ArrayList;import java.util.Date;
/** * * @author jefferson */public class LeilaoDaoImpl implements LeilaoDao {
    private EntityManager em = HibernateUtil.getInstance().getFactory().createEntityManager();
    @Override    public void addLeilao(Leilao leilao) {
        em.getTransaction().begin();
        em.persist(leilao);                em.getTransaction().commit();
    }
    @Override    public Leilao removeLeilao(Leilao leilao) {                em.getTransaction().begin();                em.remove(leilao);                em.getTransaction().commit();
        return leilao;
    }
    @Override    public List<Leilao> listarTodos() {        return em.createQuery("SELECT c FROM leiloes c").getResultList();    }
    @Override    public List<Leilao> listarTodosAtivos() {              return em.createQuery("SELECT l FROM leiloes l WHERE status = 'Ativo'").getResultList();
    }
    @Override    public List<Leilao> listarTodosInativos() {              return em.createQuery("SELECT l FROM leiloes l WHERE status = 'Inativo'").getResultList();   }

}

Classe Entity
/* * To change this template, choose Tools | Templates * and open the template in the editor. */
package br.pb.sistcomp.entity;
import java.io.Serializable;import java.util.Date;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.OneToOne;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;
/** * * @author jefferson *///Estou apenas testando@Entity@Table(name="leiloes")public class Leilao implements Serializable {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;    @OneToOne    private Produto produto;    @Column(nullable=true)    private float lance_ini;    @Column(nullable=true)    private String status;    @Temporal(TemporalType.TIME)    private Date hora_criacao;    @Temporal(TemporalType.DATE)    private Date data_criaca;    @Column(nullable=true)    private Integer duracao;    @Column    private String descricao;
    public Leilao(){
    }
    public Leilao(Produto produto, float lance_ini, String status, Date hora_criacao, Date data_criaca, Integer duracao, String descricao) {        this.produto = produto;        this.lance_ini = lance_ini;        this.status = status;        this.hora_criacao = hora_criacao;        this.data_criaca = data_criaca;        this.duracao = duracao;        this.descricao = descricao;    }
    public String getDescricao() {        return descricao;    }
    public void setDescricao(String descricao) {        this.descricao = descricao;    }
    
    public Date getData_criaca() {        return data_criaca;    }
    public void setData_criaca(Date data_criaca) {        this.data_criaca = data_criaca;    }
    public Integer getDuracao() {        return duracao;    }
    public void setDuracao(Integer duracao) {        this.duracao = duracao;    }
    public Date getHora_criacao() {        return hora_criacao;    }
    public void setHora_criacao(Date hora_criacao) {        this.hora_criacao = hora_criacao;    }
    public float getLance_ini() {        return lance_ini;    }
    public void setLance_ini(float lance_ini) {        this.lance_ini = lance_ini;    }
    public Produto getProduto() {        return produto;    }
    public void setProduto(Produto produto) {        this.produto = produto;    }
    public String isStatus() {        return status;    }
    public void setStatus(String status) {        this.status = status;    }



    public Integer getId() {        return id;    }
    public void setId(Integer id) {        this.id = id;    }
    @Override    public int hashCode() {        int hash = 0;        hash += (id != null ? id.hashCode() : 0);        return hash;    }
    @Override    public boolean equals(Object object) {        // TODO: Warning - this method won't work in the case the id fields are not set        if (!(object instanceof Leilao)) {            return false;        }        Leilao other = (Leilao) object;        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {            return false;        }        return true;    }
    @Override    public String toString() {        return "Leilao{" + "Id = " + id + " Produto = " + produto + " Lance Inicial = " + lance_ini + " Status = " + status + " Hora criada = " + hora_criacao + " Data criada = " + data_criaca + " Duracao = " + duracao + " Descricao=" + descricao + '}';    }
   
}




Responder

Gostei + 0

29/04/2011

Jefferson Alves



E outra coisa,
Quando você diz que está bem configurado, você colocou o driver do banco na pasta lib do glassfish,entrou no console do Glassfish, configurou o datasource e fez um teste de ping né? Depois configurou o acesso via JNDI e testou o acesso direto? Consegue acessar o datasource diretamente via JNDI usando
context.lookup()
?Veja esse tutorial aqui: http://www.albeesonline.com/blog/2008/08/06/creating-and-configuring-a-mysql-datasource-in-glassfish-application-server/ 
 

Está ok, esse mesmo banco utilizei com o servidor TOMCAT e funcionou blza. Dei o ping também é foi sucesso.
Não sei por que o glassfish está fazendo isso.
Responder

Gostei + 0

29/04/2011

Robson Teixeira

Olá pelo seu codigo você não pretende fazer uso de JNDI então remova a tag no seu persistence.xml
<jta-data-source></jta-data-source> pois ela que permitir o acesso via JNDI normalmente se persistir coloque a tag <non-jta-data-source/>

e outra coloque a tag provider e indique a classe que fará isso também no persistence.xml no caso classe no hibernate org.hibernate.ejb.HibernatePersistence

com isso sua aplicação não usar recursos JNDI e tambem quando vc usa JNDI e tenta criar o EntityManagerFactory ele da erro mesmo dizendo que não pode ser construido.

espero ter ajudado
att
robson
Responder

Gostei + 0

30/04/2011

Jefferson Alves


  Olá a todos! Consegui resolver o problema e vcs foran muito útil, um amigo trocou o 
javax.persistence.blbla que tinha nas tags property no meu primeiro persistence.xml e add hibernate.blabla
Com isso foi sanado os bugs! Obrigado a todos!!
Responder

Gostei + 0

30/04/2011

Davi Costa

Show de bola cara!

Posta seu código para quem passar pelo mesmo problema, ver qual foi sua solução.

Att Davi
Responder

Gostei + 0

10/05/2011

Dyego Carmo

Funcionou ?

Se sim , por favor feche :)
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar