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