• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Persistent Unit at EAR level

 
Ranch Hand
Posts: 48
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi,

This is regarding the statement in JPA specification,

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”.
...
...
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.



I am trying to understand how do you define a persistent unit at the ear level as opposed to a PU at application jar level. As I understand, an ear can contain jars and wars. So a PU defined in a jar file that is contained in an ear (e.g. /lib/somejar.jar ), is considered as defined as application jar level or ear level?

I think am confused between application jar, ejb-jar and a regular jar. Is there a difference between these? A jar file containing ejbs is ejb-jar, isn't it? so if a PU is defined in an ejb-jar, would it be considered as "ear" level? What would be a regular jar?

Sorry, I am totally confused about this and would appreciate any help !

 
Enthuware Software Support
Posts: 4810
52
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
1. If you have jar at the root level containing META-INF/ejb-jar.xml, then that's an ejb-jar. ejb-jar.xml is now optional (because of annotations). So pretty much any jar sitting at the root of the ear is an ejb-jar, unless it is an application-client jar.
2. If you have jar at the root level containing META-INF/application-client.xml, then that's an application client jar.
3. If you have war at the root level, that's your webapp jar.

PUs in above jars are not accessible to code in other jars.

4. If you have a jar file in the "library directory" of your ear [which, by default, is /lib], it is a shared jar and is accessible to all the other jars. This is your EAR level jar and thus EAR level PU (if it contains a PU), which can be accessed by code in any other jar. It can be accessed using the relative path from the jar of the accessing component to the shared jar. For example, if you have mywebapp.war that is trying to access a PU named allentitiesPU, contained in /lib/allentities.jar, it can do, ../lib/allentities.jar#allentitiesPU

HTH,
Paul.


reply
    Bookmark Topic Watch Topic
  • New Topic