You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Timothy Ward (JIRA)" <ji...@apache.org> on 2010/02/01 18:16:18 UTC

[jira] Created: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

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: integration
    Affects Versions: 2.0.0-beta
         Environment: OSGi
            Reporter: Timothy Ward


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 avoided in an OSGi envrionment (to see why read http://blog.bjhargrave.com/2007/09/classforname-caches-defined-class-in.html ).

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.


[jira] Commented: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12903432#action_12903432 ] 

Donald Woods commented on OPENJPA-1491:
---------------------------------------

You need Aries JPA + OpenJPA to support JPA on Felix - http://incubator.apache.org/aries/


> 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.


[jira] Commented: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12878596#action_12878596 ] 

Donald Woods commented on OPENJPA-1491:
---------------------------------------

This fix only applies to OSGi environments where Apache Aries JPA 0.1-incubating is being used.
Are you trying to run OpenJPA as an OSGi bundle?  If so, are you using Apache Aries in a custom assembly or the latest Apache Geronimo 3.0-SNAPSHOT builds?


> 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.


[jira] Commented: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Jean-Philippe CLEMENT (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12878609#action_12878609 ] 

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

Well, I'm not too sure. I'm using Felix Karaf which does not come with JPA. I'm using OpenJPA to provide both API and implementation of JPA.

To be clear on the top of Karaf, I'm putting those bundles:
+ OpenJPA Aggregate Jar (2.0.0)
+ Apache Geronimo JSR-317 JPA 2.0 Spec API (1.0)
+ Commons Collections (3.2.1)
+ Commons Lang (2.5)
+ Commons Pool (1.5.3)



> 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.


[jira] Issue Comment Edited: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12878596#action_12878596 ] 

Donald Woods edited comment on OPENJPA-1491 at 6/14/10 10:46 AM:
-----------------------------------------------------------------

This fix only applies to OSGi environments where Apache Aries JPA 0.1-incubating is being used.
Are you trying to run OpenJPA as an OSGi bundle?  If so, are you using Apache Aries in a custom assembly or the latest Apache Geronimo 3.0-SNAPSHOT builds?

To be more specific - OpenJPA does not include support for the OSGi Enterprise Specification r4 v4.2 section 127 JPA Service Specification, but relies on Apache Aries JPA (http://incubator.apache.org/aries/jpaproject.html) which wrappers OpenJPA to deliver that support.

      was (Author: drwoods):
    This fix only applies to OSGi environments where Apache Aries JPA 0.1-incubating is being used.
Are you trying to run OpenJPA as an OSGi bundle?  If so, are you using Apache Aries in a custom assembly or the latest Apache Geronimo 3.0-SNAPSHOT builds?

  
> 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.


[jira] Assigned: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods reassigned OPENJPA-1491:
-------------------------------------

    Assignee: Donald Woods

> 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
>
>
> 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.


[jira] Updated: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods updated OPENJPA-1491:
----------------------------------

    Attachment: OPENJPA-1491-trunk.patch

proposed changes to fix ARIES-158

> 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
>
>         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.


[jira] Updated: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods updated OPENJPA-1491:
----------------------------------

      Component/s:     (was: integration)
                   osgi
    Fix Version/s: 2.0.0

> 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
>             Fix For: 2.0.0
>
>
> 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.


[jira] Updated: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Timothy Ward (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Timothy Ward updated OPENJPA-1491:
----------------------------------

    Description: 
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

  was:
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 avoided in an OSGi envrionment (to see why read http://blog.bjhargrave.com/2007/09/classforname-caches-defined-class-in.html ).

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


> 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: integration
>    Affects Versions: 2.0.0-beta
>         Environment: OSGi
>            Reporter: Timothy Ward
>
> 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.


[jira] Resolved: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods resolved OPENJPA-1491.
-----------------------------------

    Resolution: Fixed

trunk r922397

> 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
>
>         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.


[jira] Commented: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Jean-Philippe CLEMENT (JIRA)" <ji...@apache.org>.
    [ 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.


[jira] Work started: (OPENJPA-1491) org.apache.openjpa.kernel.Bootstrap uses the application classloader to load OpenJPA internals

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-1491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Work on OPENJPA-1491 started by Donald Woods.

> 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
>
>
> 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.