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

Reply via email to