Ich betreibe Glassfish 3.1-SNAPSHOT ab heute (2010-11-12).Fehlerbehebung "Konnte nicht eine Persistenzeinheit ... lösen" Fehler, wenn PU angegeben ist, gefunden
Ich verwende den eingebetteten EJBContainer.
Auf dem Klassenpfad, wie vom EJBContainer gemeldet, habe ich eine META-INF/persistence.xml. Diese Datei definiert zwei Persistenzeinheiten: eine namens "ngp" und eine namens "cx".
Debugging-Ausgabe zeigt, dass der Glassfish JPA-Deployer es findet und sowohl die cx PU als auch die ngp PU erkennt.
Die EJBContainer Bomben aus dem folgenden allzu häufigen Fehler 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)
ich noch einmal betonen, dass die Bereitstellungsprotokolle zeigen, dass die deployer trifft beide Persistenzeinheiten zumindest.
Die Klasse, die die "cx" PU enthält die üblichen Text verwenden möchte:
@PersistenceContext(unitName="cx")
private EntityManager em;
Die persistence.xml ist in (der üblichen Maven Platz) target/test-classes/META-INF
und sieht wie folgt aus:
<?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>
Die Glassfish eingebettet EJBContainer, während seine Arbeit tut, gibt dies:
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
Fehlerbehebung bei allen?
Ich sollte erwähnen, ich verwende JTA - Container verwaltet Transaktionen - in beiden PUs. Es kommt mir vor, dass XA hier eine Voraussetzung wäre. Würde die Tatsache, dass meine Testdatenquellen nicht XA-konform sind, Ursache für diesen Fehler sein? –
Die Datenquellen wurden aktualisiert, um XA zu verwenden. Kein Effekt. –
Ob die Datenquellen XA sind oder nicht sollte nicht wichtig sein, zumindest nicht jetzt (es könnte später sein, wenn Sie sich entscheiden, beide EM gleichzeitig zu verwenden, aber das ist eine andere Geschichte). Funktioniert es mit nur einer PU? –