سؤال

In a .ear file, my EJBs are copied in several jar and war for some technical constraints. And only one of these jar contains the persistence.xml file where I have configured several persistence units.

myear.ear
|---- myjar1.jar
|-------- META-INF/persistence.xml
|---- myjar2.jar
|---- mywar.war

The problem is Jboss cannot find the persistence configuration for the classes within the jar "myjar2" and the war :

Could not get class configuration for ....EjbA.class due to the following errors: Can't find a deployment unit named xxxxx at subdeployment "jar2.jar" of deployment "myear.ear"

To resolve that, I tried to create a new jar containing only the persistence.xml file but it doesn't work.

Any idea of how I could share my persistence.xml file to every jar without reorganising all my ear archive?

هل كانت مفيدة؟

المحلول

As per the JPA spec, it should be possible for you to define a persistence unit at the EAR level that is visible to all the submodules that you define in the same .ear:

8.2.2 Persistence Unit Scope

...

A persistence unit that is defined at the level of the EAR is generally visible to all components in the application. However, if a persistence unit of the same name is defined by an EJB-JAR, WAR, or application jar file within the EAR, the persistence unit of that name defined at EAR level will not be visible to the components defined by that EJB-JAR, WAR, or application jar file unless the persistence unit reference uses the persistence unit name # syntax to specify a path name to disambiguate the reference.

However, in section 8:

NOTE: Java Persistence 1.0 supported use of a jar file in the root of the EAR as the root of a persistence unit. This use is no longer supported. Portable applications should use the EAR library directory for this case instead. See [9].

So I would try to place the jar in the lib folder. If you need that module to be a EJB one, it must be in the root of the ear, so you can create a separate jar with the persistence.xml file.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top