The JPA specification makes the following assertion about PersistenceUnitInfo's PersistenceUnitRootUrl value:
- Returns the URL for the jar file or directory that is the
- root of the persistence unit. (If the persistence unit is
- rooted in the WEB-INF/classes directory, this will be the
- URL of that directory.)
- The URL will either be a file: URL referring to a jar file
- or referring to a directory that contains an exploded jar
- file, or some other URL from which an InputStream in jar
- format can be obtained.
- @return a URL referring to a jar file or directory.
public URL getPersistenceUnitRootUrl();
Currently, OpenJPA supports the following URL patterns:
1) file: URL which addresses a jar file or an exploded jar file (directory)
2) jar: URL which addresses a jar file that terminates with "!/" (i.e., jar:file:somepath/myjar!/)
3) Any URL that ends with ".jar"
What it does not support is a jar URL of this pattern: jar:file:somepath/myjar!/WEB-INF/classes
OpenJPA's AbstractCFMetaDataFactory.parsePersistentTypeNames() method will find that the
URL doesn't match the three scenarios listed above, and defaults to attempting to parse it as an
XML file, which is obviously not an appropriate behavior for processing a Jar file.
The "jar:file:somepath/myjar!/WEB-INF/classes" pattern must be supported to accommodate
J2EE application servers that pass such a URL into PersistenceUnitInfo._persistenceUnitRootUrl