openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jean-Philippe CLEMENT (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals
Date Mon, 14 Jun 2010 12:51:16 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12878559#action_12878559
] 

Jean-Philippe CLEMENT commented on OPENJPA-1491:
------------------------------------------------

Issue seems closed and fixed in v2.0.0, but I experience this problem in the v2.0.0 relase:
Caused by: <openjpa-2.0.0-r422266:935683 fatal user error> org.apache.openjpa.persistence.ArgumentException:
The named BrokerFactory "org.apache.openjpa.jdbc.ke
rnel.JDBCBrokerFactory" is not valid.
        at org.apache.openjpa.kernel.Bootstrap.getFactoryClass(Bootstrap.java:159)
        at org.apache.openjpa.kernel.Bootstrap.invokeFactory(Bootstrap.java:111)
        at org.apache.openjpa.kernel.Bootstrap.newBrokerFactory(Bootstrap.java:62)
        ... 30 more
Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at org.apache.openjpa.kernel.Bootstrap.getFactoryClass(Bootstrap.java:157)
        ... 32 more

Is this problem really fixed, or does a workaround exist?

> org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA
internals
> ----------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1491
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1491
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: osgi
>    Affects Versions: 2.0.0-beta
>         Environment: OSGi
>            Reporter: Timothy Ward
>            Assignee: Donald Woods
>             Fix For: 2.0.0-beta3
>
>         Attachments: OPENJPA-1491-trunk.patch
>
>
> When attempting to create an EntityManagerFactory in an OSGi environment the org.apache.openjpa.kernel.Bootstrap
class attempts to instantiate a BrokerFactory using reflection. When the Bootstrap class attempts
to load this class it only ever uses the ClassLoader passed in by the PersistenceUnitInfo.
This means that the default broker (contained within OpenJPA) can never be loaded. The client
bundle should not have to import the internals of OpenJPA to make this work, so OpenJPA should
attempt to load the class using its own bundle classloader. This is the expected behaviour
for an OSGi bundle.
> Additionally, the implementation uses Class.forName() which should be used carefully
in an OSGi envrionment (to see why read http://blog.bjhargrave.com/2007/09/classforname-caches-defined-class-in.html
). It should be fine here because the variant that takes a ClassLoader is used.
> The following exception is generated when OpenJPA attempts to use the application classloader
to load an internal class.
> <openjpa-2.0.0-SNAPSHOT-r422266:905001 fatal user error> org.apache.openjpa.persistence.ArgumentException:
Could not invoke the static newInstance method on the named factory class "<<openjpa-2.0.0-SNAPSHOT-r422266:905001
fatal user error> org.apache.openjpa.util.UserException: The named BrokerFactory "org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory"
is not valid.>".
> 	at org.apache.openjpa.kernel.Bootstrap.newBrokerFactory(Bootstrap.java:70)
> 	at org.apache.openjpa.persistence.PersistenceProviderImpl.getBrokerFactory(PersistenceProviderImpl.java:145)
> 	at org.apache.openjpa.persistence.PersistenceProviderImpl.createContainerEntityManagerFactory(PersistenceProviderImpl.java:180)
> 	at org.apache.openjpa.persistence.PersistenceProviderImpl.createContainerEntityManagerFactory(PersistenceProviderImpl.java:62)
> 	at org.apache.aries.jpa.container.impl.EntityManagerFactoryManager.createEntityManagerFactories(EntityManagerFactoryManager.java:227)
> 	at org.apache.aries.jpa.container.impl.EntityManagerFactoryManager.bundleStateChange(EntityManagerFactoryManager.java:121)
> 	at org.apache.aries.jpa.container.impl.PersistenceBundleManager.modifiedBundle(PersistenceBundleManager.java:197)
> 	at org.apache.aries.util.tracker.MultiBundleTracker$InternalBundleTracker.modifiedBundle(MultiBundleTracker.java:108)
> 	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:453)
> 	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:237)
> 	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:413)
> 	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:916)
> 	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:220)
> 	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:149)
> 	at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEventPrivileged(Framework.java:1350)
> 	at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1301)
> 	at org.eclipse.osgi.framework.internal.core.BundleHost.stopWorker(BundleHost.java:490)
> 	at org.eclipse.osgi.framework.internal.core.AbstractBundle.suspend(AbstractBundle.java:546)
> 	at org.eclipse.osgi.framework.internal.core.Framework.suspendBundle(Framework.java:1098)
> 	at org.eclipse.osgi.framework.internal.core.PackageAdminImpl.suspendBundle(PackageAdminImpl.java:314)
> 	at org.eclipse.osgi.framework.internal.core.PackageAdminImpl.processDelta(PackageAdminImpl.java:460)
> 	at org.eclipse.osgi.framework.internal.core.PackageAdminImpl.doResolveBundles(PackageAdminImpl.java:241)
> 	at org.eclipse.osgi.framework.internal.core.PackageAdminImpl$1.run(PackageAdminImpl.java:176)
> 	at java.lang.Thread.run(Thread.java:735)
> Caused by: <openjpa-2.0.0-SNAPSHOT-r422266:905001 fatal user error> org.apache.openjpa.persistence.ArgumentException:
The named BrokerFactory "org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory" is not valid.
> 	at org.apache.openjpa.kernel.Bootstrap.getFactoryClass(Bootstrap.java:159)
> 	at org.apache.openjpa.kernel.Bootstrap.invokeFactory(Bootstrap.java:111)
> 	at org.apache.openjpa.kernel.Bootstrap.newBrokerFactory(Bootstrap.java:62)
> 	... 23 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory
> 	at java.lang.Class.forName(Class.java:169)
> 	at org.apache.openjpa.kernel.Bootstrap.getFactoryClass(Bootstrap.java:157)
> 	... 25 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message