Я использую Glassfish 3.1-SNAPSHOT с сегодняшнего дня (2010-11-12).
Я использую встроенный EJBContainer.
В пути к классам, как сообщает EJBContainer , У меня есть файл META-INF / persistence.xml. В этом файле определены две единицы сохраняемости: одна называется «ngp», а вторая - «cx».
Выходные данные отладки показывают, что средство развертывания Glassfish JPA находит его и распознает как cx PU, так и ngp PU.
EJBContainer бомбит со следующей слишком распространенной ошибкой JPA:
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)
Я еще раз подчеркиваю, что журналы развертывания показывают, что, по крайней мере, развертыватель встречает оба модуля сохраняемости.
Класс, который хочет использовать "cx" PU, содержит обычный шаблон:
@PersistenceContext(unitName="cx")
private EntityManager em;
persistence.xml находится в (обычное место Maven) target / test-classes / META-INF
и выглядит следующим образом:
<?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>
Встроенный EJBContainer Glassfish, выполняя свою работу, выводит это:
Nov 12, 2010 1:24:05 PM com.sun.logging.LogDomains$1 log
FINE: Got com.sun.enterprise.deployment.node.PersistenceUnitNode@2026c088
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 com.sun.enterprise.deployment.node.PersistenceUnitNode@1648ff68
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
Рецепты устранения неполадок, кто-нибудь?