PersistenceUnit kann nicht bezogen werden

Kenji

Grünschnabel
Hallo zusammen,

ich habe mehrere EE-Projekte in Eclipse 3.5 und nutze zum Deployment den Glassfish Application Server. Allerdings habe ich Probleme, meine PersistenceUnit zu beziehen.

Code:
Command deploy failed : Deploying application in domain failed; Could not resolve a persistence unit corresponding to the persistence-unit-ref-name [de.test.EMHelper/emFactory] in scope of the module called [TestEar#/usr/local/Java5EE/domains/domain1/applications/j2ee-apps/TestEar/TestWeb_war]. Please verify your application.

Ich habe folgendes Projektlayout in Eclipse:
- TestBase (Java Projekt, Module Dependency: TestEjb.jar)
-- de.test.EMHelper

- TestEjb (EJB Projekt)
-- ejbModule
--- de.test.domain.Classid (EntityBean)
--- META-INF
---- persistence.xml

- TestWeb (enthält eine Bean, die einen EMHelper erzeugt und eine JSP, die diese aufruft.)

- TestEar (Enterprise Application Project)
-- Bundled Libraries: TestBase.jar
-- Modules: TestEjb.jar, TestWeb.war

DIe Projekte EJB, Web und Base referenzieren die Java EE Library, die auch die toplink-essentials.jar enthält.

Meine persistence.xml sieht wie folgt aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd"
	version="1.0">

	<persistence-unit name="testPU" transaction-type="JTA">
		<provider>oracle.toplink.essentials.PersistenceProvider</provider>
		<jta-data-source>jdbc/mysqldb</jta-data-source>
		<class>de.test.domain.Classid</class>
		<properties />
	</persistence-unit>

</persistence>

In der Klasse EMHelper versuche ich, die PersistenceUnit zu injecten.
Code:
public class EMHelper {

	@PersistenceUnit(unitName="testPU")
	private EntityManagerFactory emFactory;

	public EntityManager getManager() {

		return emFactory.createEntityManager();
	
	}
	
}

Allerdings kommt es beim Deployen zu der obigen Fehlermeldung. Ein manuelles Lookup der jdbc/mysqldb funktioniert, also die Datenquelle existiert im JNDI. Ich vermute, meine persistence.xml kann nicht gefunden werden, allerdings weiß ich nicht, wo ich die ansonsten einbauen soll.

Hat jemand eine Idee?

Gruß, Matze
 
Hallo,

deine persistence.xml wird sehr wohl gefunden. Das Problem ist, dass du deine persistence-unit (persistence.xml + Entities) innerhalb einer ejb-jar definierst (im ejbModule). Damit ist sie laut spec auch nur dort sichtbar. Du versuchst sie aber in deinem Web-Modul zu benutzen. Damit sie im Web-Modul sichtbar ist, musst du sie dort definieren bzw. im EAR direkt, wenn Sie für alle Bestandteile deiner Anwendung sichtbar sein soll.

Gruß
THMD
 

Neue Beiträge

Zurück