OpenJPA
  1. OpenJPA
  2. OPENJPA-1460

Fix scope visibility of orm.xml when it is packaged in both ear file and war file

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0.0-M3, 2.0.0-beta
    • Fix Version/s: 2.0.0-beta2
    • Component/s: jpa
    • Labels:
      None
    • Patch Info:
      Patch Available

      Description

      Per JPA 2.0 spec, section 8.2.2:
      An EJB-JAR, WAR, application client jar, or EAR can define a persistence unit. When referencing a persistence unit using the unitName annotation element or persistence-unit-name deployment descriptor element, the visibility scope of the persistence unit is determined by its point of definition:

      (1) 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.

      (2) 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 the persistence.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 the unitName annotation element
      or persistence-unit-name deployment descriptor element to reference a persistence unit defined at EAR level.

      1. OPENJPA-1460.patch
        5 kB
        Fay Wang
      2. OPENJPA-1460-1.patch
        5 kB
        Fay Wang
      3. OPENJPA-1460-2.patch
        9 kB
        Fay Wang
      4. OPENJPA-1460-3.patch
        9 kB
        Fay Wang
      5. OPENJPA-1460-4.patch
        9 kB
        Donald Woods
      6. OPENJPA-1460-5.patch
        9 kB
        Fay Wang

        Activity

        Hide
        Donald Woods added a comment -

        all patches were applied and included in Beta2, so closing this. there is a open subtask for remaining optional work.

        Show
        Donald Woods added a comment - all patches were applied and included in Beta2, so closing this. there is a open subtask for remaining optional work.
        Hide
        Donald Woods added a comment -

        Fay, why did you reopen this? Is there more work or docs updates to do?

        Show
        Donald Woods added a comment - Fay, why did you reopen this? Is there more work or docs updates to do?
        Hide
        Fay Wang added a comment -

        Made changes according to Pinaki's suggestion.

        Show
        Fay Wang added a comment - Made changes according to Pinaki's suggestion.
        Hide
        Pinaki Poddar added a comment -

        This change should not expose the persistent environment setting on to OpenJPAConfiguration interface. That method does not have a clear semantics to be on the configuration interface. Please keep the method on OpenJPAConfigurationImpl and do a conditional cast to solve the problem at hand..

        Show
        Pinaki Poddar added a comment - This change should not expose the persistent environment setting on to OpenJPAConfiguration interface. That method does not have a clear semantics to be on the configuration interface. Please keep the method on OpenJPAConfigurationImpl and do a conditional cast to solve the problem at hand..
        Hide
        Donald Woods added a comment -

        Updated patch that can be applied to the latest trunk (r908071) code

        Show
        Donald Woods added a comment - Updated patch that can be applied to the latest trunk (r908071) code
        Hide
        Fay Wang added a comment -

        This patch fixes the violation of the principle of spec-agnostic OpenJPAConfiguration.

        Show
        Fay Wang added a comment - This patch fixes the violation of the principle of spec-agnostic OpenJPAConfiguration.
        Hide
        Fay Wang added a comment -

        Per spec:
        8.2.1.6.2 Object/relational Mapping Files
        A object/relational mapping XML file named orm.xml may be specified in the META-INF directory in the root of the persistence unit or in the META-INF directory of any jar file referenced by the persistence.xml. Alternatively, or in addition, one or more mapping files may be referenced by the mapping-file elements of the persistence-unit element. These mapping files may be present anywhere on the class path.

        As a result:
        the entity manager factory will look look for orm.xml file
        1. in the same location (jar file\meta-inf directory) as where the persistence.xml that defined the pu of the EMF was found.
        2. in the meta-inf directory of any jar file explicitly mentioned in the <jarfile> tag in the PU.

        finally any <mapping-file> files are also loaded.

        Show
        Fay Wang added a comment - Per spec: 8.2.1.6.2 Object/relational Mapping Files A object/relational mapping XML file named orm.xml may be specified in the META-INF directory in the root of the persistence unit or in the META-INF directory of any jar file referenced by the persistence.xml. Alternatively, or in addition, one or more mapping files may be referenced by the mapping-file elements of the persistence-unit element. These mapping files may be present anywhere on the class path. As a result: the entity manager factory will look look for orm.xml file 1. in the same location (jar file\meta-inf directory) as where the persistence.xml that defined the pu of the EMF was found. 2. in the meta-inf directory of any jar file explicitly mentioned in the <jarfile> tag in the PU. finally any <mapping-file> files are also loaded.
        Hide
        Fay Wang added a comment -

        The fix checked into the JIRA assume that the orm.xml to be used should reside in the same location as the persistence.xml that is used to create EntityManagerFactory.

        Show
        Fay Wang added a comment - The fix checked into the JIRA assume that the orm.xml to be used should reside in the same location as the persistence.xml that is used to create EntityManagerFactory.
        Hide
        Fay Wang added a comment -

        fix NPE.

        Show
        Fay Wang added a comment - fix NPE.

          People

          • Assignee:
            Fay Wang
            Reporter:
            Fay Wang
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development