JTA com EJB Lite 3 [ERRO] - [RESOLVIDO]!

4 respostas
fabiomedeirosf

PessoALL, seguinte:
estou usando EJB Lite para uma app jse; até então as chamadas dos componentes EJB funcionam perfeitamente; o problema só aparece quando tentei fazer a conexão via jta com o banco.
Vejam abaixo:

@Stateless
@DataSourceDefinition(name="java:app/jdbc/estudo",
                      databaseName="estudo",
                      password="123456",
                      user="postgres",
                      className="org.postgresql.Driver",
                      portNumber=5432,
                      serverName="localhost")
public class DataSourceCustomBean {

    @PersistenceContext(unitName="ExemploEJbPU")
    private EntityManager em;

Este dataSource é quem disponibiliza o data-source-name para que possa referenciar no persistence.xml, que ficou configurado do seguinte modo:

<?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="ExemploEJbPU" transaction-type="JTA">
      <jta-data-source>java:app/jdbc/estudo</jta-data-source>
    
    
    <properties>
      
      <property name="eclipselink.ddl-generation" value="update"/>
    </properties>
  </persistence-unit>
</persistence>
A chamada a este componente é feita do seguinte modo:
EJBContainer container = EJBContainer.createEJBContainer();

       
        InitialContext context = (InitialContext) container.getContext();

        
       DataSourceCustom dataSource = (DataSourceCustom) context.lookup("java:global/classes/DataSourceCustomBean");
Assim que tento rodar a aplicação, me é retornado o seguinte stack, no momento que ele vai criar o EJBContainer:
SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'java:app/jdbc/estudo' in SerialContext  [Root exception is javax.naming.NamingException: Invocation exception: Got null ComponentInvocation ]
        at org.glassfish.persistence.jpa.PersistenceUnitInfoImpl.<init>(PersistenceUnitInfoImpl.java:111)
        at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:130)
        at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:96)
        at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:121)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:644)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:296)
        at org.glassfish.kernel.embedded.EmbeddedDeployerImpl.deploy(EmbeddedDeployerImpl.java:214)
        at org.glassfish.kernel.embedded.EmbeddedDeployerImpl.deploy(EmbeddedDeployerImpl.java:144)
        at org.glassfish.ejb.embedded.EJBContainerImpl.deploy(EJBContainerImpl.java:128)
        at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createEJBContainer(EJBContainerProviderImpl.java:120)
        at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:102)
        at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:78)
        at exemploejb.Main.main(Main.java:32)

Aguardo sugestões/soluções.

4 Respostas

G

Não use java/comp/env.

fabiomedeirosf

Como devo usar entao?

G

fabiomedeirosf:
Como devo usar entao?
jdbc/estudo

fabiomedeirosf

Siimplesmente alterei o jar o glassfish embeddable!

Criado 17 de março de 2011
Ultima resposta 18 de mar. de 2011
Respostas 4
Participantes 2