what is the right path to refer a jar file in jpa persistence.xml in a web app?

前端 未结 4 1218
南旧
南旧 2020-11-27 18:26

persistence.xml looks like this:


    org.hibernate.ejb.Hiber         


        
相关标签:
4条回答
  • 2020-11-27 18:53
    war2.war
          WEB-INF/lib/warEntities.jar
          WEB-INF/classes/META-INF/persistence.xml
    persistence.xml contains:
       <jar-file>lib/warEntities.jar</jar-file>
    

    this format works for war file. Im using Wildlfy 8.2.0 and JPA 2.1

    0 讨论(0)
  • 2020-11-27 19:12

    Not sure this is related to the fact that you are deploying as a WAR, but the path should be simply "app-sevices-1.0.jar" and the jar should be in the lib of the Java EE application. The thing is: I'm not sure if this is available for the simplified "war" Java EE application. I suspect this is available only for the traditional Java EE deployment file (ear). I would test making an EAR, containing a WAR for the webapp, JAR for the PU and your other JAR for app-services, like a traditional Java EE deployment would be.

    Another thing to note is that relative paths are not supported, and usage of this in SE environment is not supported by all vendors.

    0 讨论(0)
  • 2020-11-27 19:13

    Taking a look at jsr always works!

    8.2.1.6.3 Jar Files

    One or more JAR files may be specified using the jar-file elements instead of, or in addition to the mapping files specified in the mapping-file elements. If specified, these JAR files will >be searched for managed persistence classes, and any mapping metadata annotations found on them will be pro-cessed, or they will be mapped using the mapping annotation defaults defined by this specification. Such JAR files are specified relative to the directory or jar file that contains the root of the persis-tence unit.

    The following examples illustrate the use of the jar-file element to reference additional persistence classes. These examples use the convention that a jar file with a name terminating in “PUnit” contains the persistence.xml file and that a jar file with a name terminating in “Entities” contains additional persistence classes.

    Example 1:
    app.ear  
       lib/earEntities.jar  
       earRootPUnit.jar (with META-INF/persistence.xml )  
    persistence.xml contains:  
       <jar-file>lib/earEntities.jar</jar-file>  
    
    Example 2:
    app.ear
       lib/earEntities.jar
       lib/earLibPUnit.jar (with META-INF/persistence.xml )
    persistence.xml contains:
       <jar-file>earEntities.jar</jar-file>
    
    Example 3:
    app.ear
       lib/earEntities.jar
       ejbjar.jar (with META-INF/persistence.xml )
    persistence.xml contains:
       <jar-file>lib/earEntities.jar</jar-file>
    
    Example 4:
    app.ear
        war1.war
           WEB-INF/lib/warEntities.jar
           WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml )
    persistence.xml contains:
        <jar-file>warEntities.jar</jar-file>
    
    Example 5:
    app.ear
       war2.war
          WEB-INF/lib/warEntities.jar
          WEB-INF/classes/META-INF/persistence.xml
    persistence.xml contains:
       <jar-file>lib/warEntities.jar</jar-file>
    
    Example 6:
    app.ear
        lib/earEntities.jar
        war2.war
        WEB-INF/classes/META-INF/persistence.xml
     persistence.xml contains:
        <jar-file>../../lib/earEntities.jar</jar-file>
    
    Example 7:
    app.ear
       lib/earEntities.jar
       war1.war
       WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml )
    persistence.xml contains:
       <jar-file>../../../lib/earEntities.jar</jar-file>
    

    As you see there is no example for war files, all war files in the examples above are inside ear files!
    But I tested in war files and it works just when I specify the absolute path of jar files and it is not a good approach for production environment!

    0 讨论(0)
  • 2020-11-27 19:19

    just in case someone else stumbles upon this: the jar-file-statement is only valid. when the persistence-unit is deployed as part of an Enterprise Archives (.ear) - in every other case (.war), the persistence.xml must reside in /META-INF/ and cannot refrence classes that live outside the persistence-unit (see: http://javahowto.blogspot.com/2007/06/where-to-put-persistencexml-in-web-app.html). So, as far as I know, there is no way to have a persistence.xml living in WEB-INF/classes/META-INF that references classes that do not live in WEB-INF/classes.

    0 讨论(0)
提交回复
热议问题