Interestingly, when I crank the logging up, and when OpenJPA is reporting
its properties, it says:
openjpa.RuntimeUnenhancedClasses: 0
Like I said, I have
<property name="openjpa.RuntimeUnenhancedClasses"
value="supported" />
...in my persistence.xml. Is something happening here?
Thanks,
Laird
On Wed, May 12, 2010 at 4:00 PM, Laird Nelson <[email protected]> wrote:
> I'm getting an odd NoClassDefFoundError while running unit tests in a
> standard Java SE environment. I'm on Java 6 with OpenJPA 2.0.0-beta3.
>
> I have an AbstractType class that is a @MappedSuperclass. It is in one jar
> file.
> It contains, among other things, an @Id mapping, and a couple of
> straightforward @Basic/@Column mappings (no joins, no embeddables, nothing
> complicated).
>
> Then I have a class, RelationshipRoleTypeEntity, that extends from it. It
> is an @Entity and adds no additional persistent fields.
>
> The jar file and the classpath root containing my
> RelationshipRoleTypeEntity.class are both on the classpath.
>
> Hibernate loads and runs this fine.
>
> OpenJPA says:
>
> java.lang.NoClassDefFoundError: Could not initialize class
> com.jenzabar.ngp.constituent.jpa.RelationshipRoleTypeEntity
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:247)
> at
> org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1525)
> at
> org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1501)
> at
> org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1479)
> at
> org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1459)
> at
> org.apache.openjpa.jdbc.meta.MappingRepository.findBaseClassMapping(MappingRepository.java:1516)
> at
> org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:403)
> at
> org.apache.openjpa.meta.MetaDataRepository.preMapping(MetaDataRepository.java:736)
> at
> org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:625)
> at
> org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
> at
> org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
> at
> org.apache.openjpa.jdbc.meta.MappingRepository.getMapping(MappingRepository.java:355)
> at
> org.apache.openjpa.jdbc.meta.MappingTool.getMapping(MappingTool.java:679)
> at
> org.apache.openjpa.jdbc.meta.MappingTool.buildSchema(MappingTool.java:751)
> at org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:649)
> at
> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:149)
> at
> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:159)
> at
> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:117)
> at
> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:199)
> at
> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:213)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:151)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:57)
>
> I've found that often this means that I've forgotten to put a
> <class>xyz</class> entry in my persistence.xml, but that is present as well.
>
> Other interesting bits in the log before the ultimate error:
>
> 1328 test-OpenJPA TRACE [main] openjpa.Enhance - Enhancing type "class
> com.jenzabar.ngp.constituent.jpa.RelationshipRoleTypeEntity" loaded by
> org.apache.openjpa.lib.util.temporaryclassloa...@1b4c1d7.
> 1735 test-OpenJPA WARN [main] openjpa.MetaData - The class
> "com.jenzabar.ngp.constituent.jpa.RelationshipRoleTypeEntity" listed in the
> openjpa.MetaDataFactory configuration property could not be loaded by
> sun.misc.launcher$appclassloa...@35ce36; ignoring.
> 1735 test-OpenJPA TRACE [main] openjpa.MetaData -
> java.lang.NoSuchMethodError:
> com.jenzabar.ngp.identity.jpa.AbstractType.pcGetManagedFieldCount()I
> java.lang.NoSuchMethodError:
> com.jenzabar.ngp.identity.jpa.AbstractType.pcGetManagedFieldCount()I
>
>
> I have the property openjpa.RuntimeUnenhancedClasses="supported" set
> because I am running in a unit test environment where I vet my mappings
> against Hibernate, OpenJPA and EclipseLink, so multiple Java agents
> (OpenJPA's, EclipseLink's) would cause trouble.
>
> I have no problem with plenty of other mappings in this unit testing setup.
>
> Where should I start looking to debug this problem?
>
> Best,
> Laird
>