Estoy ejecutando Glassfish 3.1-INSTANTÁNEA a partir de hoy (2010-11-12).Reparando los errores "No se pudo resolver una unidad de persistencia ..." cuando se especifica PU, se encontró
Estoy usando el EJBContainer incorporado.
En el classpath, según lo informado por el EJBContainer, tengo un META-INF/persistence.xml. Este archivo define dos unidades de persistencia: una llamada "ngp" y otra llamada "cx".
El resultado de la depuración muestra que Glassfish JPA deployer lo encuentra, y reconoce tanto la PU cx como la PU ngp.
Las bombas EJBContainer a cabo con el siguiente error APP todo demasiado común:
java.lang.RuntimeException: Could not resolve a persistence unit corresponding to the persistence-context-ref-name [cx] in the scope of the module called [/Users/ljnelson/Projects/foo/target/test-classes/]. Please verify your application.
at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUViaEMRef(BundleDescriptor.java:693)
at com.sun.enterprise.deployment.EjbBundleDescriptor.findReferencedPUs(EjbBundleDescriptor.java:910)
at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:140)
at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:869)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:410)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
at org.glassfish.kernel.embedded.EmbeddedDeployerImpl.deploy(EmbeddedDeployerImpl.java:193)
at org.glassfish.kernel.embedded.EmbeddedDeployerImpl.deploy(EmbeddedDeployerImpl.java:142)
at org.glassfish.ejb.embedded.EJBContainerImpl.deploy(EJBContainerImpl.java:135)
at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createEJBContainer(EJBContainerProviderImpl.java:132)
at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:127)
que subrayar una vez más que los registros de la implementación muestran que, al menos, que el desarrollador se encuentra con dos unidades de persistencia.
La clase que quiere usar el "cx" PU contiene el texto modelo habitual:
@PersistenceContext(unitName="cx")
private EntityManager em;
El persistence.xml está presente en (el lugar de costumbre Maven) target/test-classes/META-INF
y tiene el siguiente aspecto:
<?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="cx" transaction-type="JTA">
<jta-data-source>java:global/jdbc/H2Test</jta-data-source>
<!-- snip -->
</persistence-unit>
<persistence-unit name="ngp" transaction-type="JTA">
<jta-data-source>java:global/jdbc/H2Test</jta-data-source>
<!-- snip -->
</persistence-unit>
</persistence>
El EJBContainer Glassfish incorporado, mientras que hace su trabajo, da salida a esto:
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINE: Got [email protected]
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINER: With attribute name
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINER: With value cx
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINE: in class com.sun.enterprise.deployment.PersistenceUnitDescriptor method setName with cx
...snip...
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINE: Got [email protected]
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINER: With attribute name
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINER: With value ngp
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINE: in class com.sun.enterprise.deployment.PersistenceUnitDescriptor method setName with ngp
Solucionar problemas de recetas, ¿alguien?
Debo mencionar que estoy usando JTA - transacciones administradas por contenedor - en ambas PU. Se me ocurre que XA sería un requisito aquí. ¿El hecho de que mis fuentes de datos de prueba no sean compatibles con XA es la causa de este error? –
Se actualizaron las fuentes de datos para usar XA; sin efecto. –
Si las fuentes de datos son XA o no, no debería importar, al menos no ahora (podría ser más tarde si decide usar ambos EM al mismo tiempo, pero esa es otra historia). ¿Funciona con solo una PU? –