Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Problema ao tentar subir aplicação (Glassfish)

Boa noite, pessoal.

Não estou conseguindo subir minha aplicação depois que alterei o meu persistence.xml para usar JTA.

Segue abaixo o meu arquivo persistence.xml.

<?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="vendinha" transaction-type="JTA">
        <!-- provider -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>jdbc/vendinhaDS</jta-data-source>
        <properties>
            <!--  propriedades do hibernate -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="false"/>
            <!--  atualiza o banco, gera as tabelas se for preciso -->
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>

Agora, segue o erro que recebo. Pior que não encontro a solução em canto algum. Me ajudem!

Informações:   HHH000204: Processing PersistenceUnitInfo [
    name: vendinha
    ...]
Informações:   HHH000412: Hibernate Core {5.2.2.Final}
Informações:   HHH000206: hibernate.properties not found
Informações:   HHH000021: Bytecode provider name : javassist
Informações:   HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
Informações:   HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
Grave:   Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
Grave:   javax.persistence.PersistenceException: [PersistenceUnit: vendinha] Unable to build Hibernate SessionFactory
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:951)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:881)
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:151)
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:207)
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:114)
    at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:223)
    at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
    at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:230)
    at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:926)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:435)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:220)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:487)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)

PS: O pool de configuração, assim como o DS, estão configurados no servidor (e "pingando").

Abaixo, segue um exemplo de como estou chamando a PU.

package br.com.pdv.dao.impl;

import br.com.pdv.entities.Cliente;
import br.com.pdv.dao.iface.IClienteDao;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author w
 */
@Stateless
public class ClienteDao extends GenericDao<Cliente> implements IClienteDao {

    @Override
    @PersistenceContext(unitName = "vendinha")
    public void setEntityManager(EntityManager entityManager) {
        super.setEntityManager(entityManager);
    }

}
5 respostas
solução!

Olá Wh,

Acredito que o problema está na seguinte linha:

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

O glassfish não utiliza o hibernate por padrão, ele utiliza o EclipseLink, quando você configurou o JTA deve ter adicionado essa linha causando o problema.

Tente substituir a linha por:

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

Caso não funcione, tente simplesmente remove-la.

Boa noite, Denis.

Perfeito! Deu certo. Eu havia até "solucionado" o problema, comentando o trecho de código do persistence.xml abaixo:

<property name="hibernate.hbm2ddl.auto" value="update

Obviamente, isso era uma gambiarra e, por consequência, eu não estava mais conseguindo persistir na base de dados. Não dava nenhuma Exception. Mas, simplesmente, eu só conseguia fazer consultas na aplicação. Sabe me dizer por quê isto estava ocorrendo? Só a título de informação mesmo.

Obrigado!

Só mais uma coisa. Caso eu optasse por continuar usando o Hibernate, visto que tenho minhas dependências configuradas no pom.xml e também configurações de log, por exemplo, no persistence.xml, como faria para contornar essa questão do Glassfish/EclipseLink?

Denis, acho que encontrei a solução! o/

Tive que adicionar o seguinte trecho de código no persistence.xml:

<!-- necessário quando uso JTA -->
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform" />

Não entendi muito bem, mas sei que funciona! Por enquanto, isso basta.

Obrigado!

Ola WH, que bom que funcionou, conforme eu havia dito, as bibliotecas do hibernate não estão presentes no glassfish. Nós estamos acostumados a sempre utilizar configurações específicas do hibernate nos projetos, por isso é comum termos problemas ao usar o glassfish.

Quando utilizamos um servidor de aplicação(glassfish) o mais comum eh utilizar as dependencias que estão no próprio servidor, talvez adicionar as dependencias no maven possam causar algum conflito, se voce prefere utilizar o hibernate, o ideal eh adiciona-lo diretamente no glassfish, tem alguns tutoriais na internet que explicam como podemos fazer o glassfish suportar hibertate, segue abaixo um deles, porém eu não testei:

http://www.hildeberto.com/2008/11/configuring-glassfish-to-support-hibernate.html

Achei estranho o trecho que você teve que adicionar, sem esse parâmetro não funcionou?

Boa tarde, Denis.

Entendo! Obrigado novamente pela resposta e pelas referências. Assim que eu chegar em casa darei uma olhada.

E não! Só funcionou adicionando aquela linha à configuração. Tentei encontrar algo a respeito dando uma olhada rápida na documentação do Hibernate, mas sem sucesso até então.