I'm trying to use OpenJPA 2.1.0 with Spring 3.0.5 and Tomcat 6.0.32 and a JPA 
2.0 persistence unit configured by annotations.

At first, the enhancer did not recognize any of my classes, which looks like 
the same problem as described in 
https://issues.apache.org/jira/browse/OPENJPA-1891.

Then I moved the Geronimo JPA JAR from my WAR to Tomcat's lib folder as 
described in this issue (but this feels wrong somehow).

After that, the enhancer starts to do some work but then fails with an 
exception which I don't really understand.

It may be related to an inheritance chain in my entity model

A -> B -> C

where A is an Entity and B and C are MappedSuperclasses.

Some trace output

8796  foo  TRACE  [main] openjpa.Enhance - Enhancing type "class com.A" loaded 
by WebappClassLoader
  context: /foo-web
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@a210b5b
.
8808  foo  TRACE  [main] openjpa.Enhance - Enhancement for "com/A" completed. 
Class size: [669/3.516]
8809  foo  TRACE  [main] openjpa.Enhance - "com/B" requires runtime 
enhancement: true
209144  foo  TRACE  [main] openjpa.Enhance - Enhancing type "class com/B" 
loaded by WebappClassLoader
  context: /foo-web
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@a210b5b
.
209170  foo  TRACE  [main] openjpa.Enhance - Enhancement for "com/B" completed. 
Class size: [1.204/5.336]
209008  foo  WARN   [main] openjpa.MetaData - The class "com.A" listed in the 
openjpa.MetaDataFactory configuration property could not be loaded by 
org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader
WebappClassLoader
  context: /foo-web
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@a210b5b
; ignoring.
209008  foo  TRACE  [main] openjpa.MetaData - java.lang.NoSuchMethodError: 
com.C.pcGetManagedFieldCount()I
java.lang.NoSuchMethodError: com.C.pcGetManagedFieldCount()I
        at com.B.<clinit>(B.java)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at 
org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
        at 
org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
        at 
org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
        at 
org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:283)
        at 
org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
        at 
org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
        at 
org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
        at 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
        at 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
        at 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:423)
        at 
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:485)
        at $Proxy12.createEntityManager(Unknown Source)

The missing method appears to be one added by the enhancer, but com.C has not 
been enhanced yet.

I was able to deploy the same unenhanced persistence unit on Glassfish without 
problems, so there must be a problem on the interface between OpenJPA, Spring 
and Tomcat.

Any ideas anyone...?

Thanks,
Harald

-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de

Reply via email to