Here are the relevant sections of the JPA 2.0 specification:
8.2 Persistence Unit Packaging
…
A persistence unit is defined by a
persistence.xml
file. The jar file or
directory whoseMETA-INF
directory
contains thepersistence.xml
file is
termed the root of the persistence
unit. In Java EE environments, the
root of a persistence unit must be one
of the following:
- an EJB-JAR file
- the WEB-INF/classes directory of a WAR file[80]
- a jar file in the WEB-INF/lib directory of a WAR file
- a jar file in the EAR library directory
- an application client jar file
It is not required that an EJB-JAR or
WAR file containing a persistence unit
be packaged in an EAR unless the
persistence unit contains persistence
classes in addition to those contained
within the EJB-JAR or WAR. See Section
8.2.1.6.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].A persistence unit must have a name.
Only one persistence unit of any given
name must be defined within a single
EJB-JAR file, within a single WAR
file, within a single application
client jar, or within an EAR. See
Section 8.2.2, “Persistence Unit
Scope”.The
persistence.xml
file may be used
to designate more than one persistence
unit within the same scope.All persistence classes defined at the
level of the Java EE EAR must be
accessible to all other Java EE
components in the application – i.e.
loaded by the application classloader
– such that if the same entity class is referenced by two different Java EE
components (which may be using
different persistence units), the
referenced class is the same identical
class.
And later:
8.2.2 Persistence Unit Scope
An EJB-JAR, WAR, application client
jar, or EAR can define a persistence
unit.When referencing a persistence unit
using theunitName
annotation
element orpersistence-unit-name
deployment descriptor element, the
visibility scope of the persistence
unit is determined by its point of
definition:
- A persistence unit that is defined at the level of an EJB-JAR, WAR, or
application client jar is scoped to
that EJB-JAR, WAR, or application jar
respectively and is visible to the
components defined in that jar or war.- 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. When the#
syntax is
used, the path name is relative to the
referencing application component jar
file. For example, the syntax
../lib/persistenceUnitRoot.jar#myPersistenceUnit
refers to a persistence unit whose
name, as specified in the name element
of thepersistence.xml
file, is
myPersistenceUnit
and for which the
relative path name of the root of the
persistence unit is
../lib/persistenceUnitRoot.jar
. The
#
syntax may be used with both theunitName
annotation element or
persistence-unit-name
deployment
descriptor element to reference a
persistence unit defined at EAR level.Also you need to include entity classes jar in manifest of pu jar http://wiki.eclipse.org/Packaging_and_Deploying_EclipseLink_JPA_Applications_(ELUG)
To summarize, you should be able to define your entities and the persistence unit at the top level of the EAR and to use them from the other modules.
I’m just not sure to understand what you tried and what problem(s) you faced.