OSGi r4v4.2 (chap. 127.1.3) defines the JPA versions as:
|JPA|Packages|Export Version|Client Import Range|Provider Imp. Range | |JPA 1.0| javax.persistence |1.0 | [1.0,2.0) | [1.0,1.1) | | | javax.persistence.spi | 1.0 | [1.0,2.0) | [1.0,1.1) | |JPA 2.0 | javax.persistence | 1.1 | [1.1,2.0) | [1.1,1.2)| | | javax.persistence.spi | 1.1 | [1.1,2.0) | [1.1,1.2) |
Compliant SPIs export as 1.1, so the import for javax.persistence should be [1.1.0,3.0.0) instead of [2.0.0,3.0.0).
In my case, {{ DefaultTraversableResolver }} happens to find the 2.0 environment using reflection (since JPA2 is available in the classpath), but later fails with {{ NoClassDefFoundError }} because of the wrong version import.
|