You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Bram Pouwelse (JIRA)" <ji...@apache.org> on 2012/10/16 19:55:02 UTC
[jira] [Commented] (OPENJPA-1346) ClassNotFoundException in
org.apache.openjpa.datacache.Caches.addTypesByName
[ https://issues.apache.org/jira/browse/OPENJPA-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13477210#comment-13477210 ]
Bram Pouwelse commented on OPENJPA-1346:
----------------------------------------
I'm experiencing the same problem in using OpenJPA in an OSGi container using multiple bundles containing a persistence context with DataCache enabled.
bundle1
EntityA
persistence.xml: <property name="openjpa.DataCache" value="true(name=bundle1cache)" />
bundle2
EntityB
persistence.xml: <property name="openjpa.DataCache" value="true(name=bundle2cache)" />
When loading this into the OSGi container retrieving data works as expected but when modifying data a ClassNotFoundException is thrown:
Modifying EntityA:
java.lang.ClassNotFoundException: nl.ditp.fabuland.security.model.EntityA not found by bundle2
at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:812)
at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:72)
at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1807)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:670)
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1654)
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:909)
at org.apache.aries.jpa.container.unit.impl.BundleDelegatingClassLoader$1.run(BundleDelegatingClassLoader.java:50)
at org.apache.aries.jpa.container.unit.impl.BundleDelegatingClassLoader$1.run(BundleDelegatingClassLoader.java:47)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.aries.jpa.container.unit.impl.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:47)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.openjpa.datacache.Caches.addTypesByName(Caches.java:44)
Modifying EntityA:
java.lang.ClassNotFoundException: nl.ditp.fabuland.security.model.EntityB not found by bundle1
.......
> ClassNotFoundException in org.apache.openjpa.datacache.Caches.addTypesByName
> ----------------------------------------------------------------------------
>
> Key: OPENJPA-1346
> URL: https://issues.apache.org/jira/browse/OPENJPA-1346
> Project: OpenJPA
> Issue Type: Question
> Components: datacache
> Affects Versions: 1.1.0
> Environment: Windows / Oracle Weblogic 10.3.1 (JPA Version: <Starting OpenJPA 1.1.1-SNAPSHOT>)
> Reporter: Niklas Mehner
>
> This seems to be the same problem as OPENJPA-1093 (only openjpa, not kodo)
> We are getting the following exception in our logfile:
> 5484 lvs-ejb3 WARN [[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'] openjpa.Runtime - null
> java.lang.ClassNotFoundException: de.evelopment.retail.lvs.ejb.stammdaten.BoxBean
> at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:247)
> at org.apache.openjpa.datacache.Caches.addTypesByName(Caches.java:48)
> at org.apache.openjpa.datacache.AbstractQueryCache.afterCommit(AbstractQueryCache.java:198)
> at org.apache.openjpa.event.RemoteCommitEventManager.fireEvent(RemoteCommitEventManager.java:132)
> at org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager.fireEvent(AbstractConcurrentEventManager.java:115)
> at org.apache.openjpa.event.AbstractRemoteCommitProvider.fireEvent(AbstractRemoteCommitProvider.java:63)
> at org.apache.openjpa.event.SingleJVMRemoteCommitProvider.broadcast(SingleJVMRemoteCommitProvider.java:58)
> at org.apache.openjpa.event.RemoteCommitEventManager.afterCommit(RemoteCommitEventManager.java:156)
> at org.apache.openjpa.event.TransactionEventManager.fireEvent(TransactionEventManager.java:107)
> at org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager.fireEvent(AbstractConcurrentEventManager.java:115)
> at org.apache.openjpa.kernel.BrokerImpl.fireTransactionEvent(BrokerImpl.java:757)
> at org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2200)
> at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1846)
> at weblogic.transaction.internal.ServerSCInfo.doAfterCompletion(ServerSCInfo.java:1038)
> at weblogic.transaction.internal.ServerSCInfo.callAfterCompletions(ServerSCInfo.java:1014)
> at weblogic.transaction.internal.ServerTransactionImpl.callAfterCompletions(ServerTransactionImpl.java:2998)
> at weblogic.transaction.internal.ServerTransactionImpl.afterCommittedStateHousekeeping(ServerTransactionImpl.java:2898)
> at weblogic.transaction.internal.ServerTransactionImpl.setCommitted(ServerTransactionImpl.java:2943)
> at weblogic.transaction.internal.ServerTransactionImpl.globalRetryCommit(ServerTransactionImpl.java:2733)
> at weblogic.transaction.internal.ServerTransactionImpl.globalCommit(ServerTransactionImpl.java:2653)
> at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:285)
> at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:233)
> at weblogic.ejb.container.internal.BaseRemoteObject.postInvoke1(BaseRemoteObject.java:621)
> at weblogic.ejb.container.internal.StatelessRemoteObject.postInvoke1(StatelessRemoteObject.java:60)
> at weblogic.ejb.container.internal.BaseRemoteObject.postInvokeTxRetry(BaseRemoteObject.java:441)
> where de.evelopment.retail.lvs.ejb.stammdaten.BoxBean is an entity bean.
> I think the problem is that openjpa uses Class.forName(..) instead of Thread.currentThread().getContextClassLoader().loadClass(...) to load the class.
> openJPA is loaded by the system classloader, while the class is from the ear-classloader, so Class.forName(..) cannot work.
> the properties used in persistence.xml are:
> <properties>
> <property name="openjpa.DetachState" value="fetch-groups(DetachedStateField=true)"/>
> <property name="openjpa.DataCache" value="true"/>
> <property name="openjpa.RemoteCommitProvider" value="sjvm"/>
> </properties>
> Can we ignore this problem or can this cause real problems (I do not care all that much if caching is not working for this class, but I don't want any data corruption)?
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira