You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "Brian DePradine (Created) (JIRA)" <ji...@apache.org> on 2012/01/10 15:26:41 UTC

[jira] [Created] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

Problem with JPAWeavingHook in an environment that uses Composite Bundles
-------------------------------------------------------------------------

                 Key: ARIES-808
                 URL: https://issues.apache.org/jira/browse/ARIES-808
             Project: Aries
          Issue Type: Bug
          Components: JPA
         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
            Reporter: Brian DePradine
            Priority: Critical


When running my OSGi application that uses JPA I get the following error:

java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
	at java.lang.reflect.Method.invoke(Method.java:611)
	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
	at java.lang.reflect.Method.invoke(Method.java:611)
	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
	at java.lang.Thread.run(Thread.java:736)
Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
	at java.lang.ClassLoader.defineClassImpl(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
	at java.lang.Class.forNameImpl(Native Method)
	at java.lang.Class.forName(Class.java:172)
	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
	... 31 more
Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
	... 62 more

I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:

  public WrappingTransformer(ClassTransformer delegate,
      ServiceReference<?> persistenceProvider) {

    if(delegate == null) 
      throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
    
    if(persistenceProvider == null) {
      throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
    }
    
    this.delegate = delegate;
    
    Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
    
    Bundle provider = persistenceProvider.getBundle();
    String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
    provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
    + "=" + provider.getVersion();
    
    if(packages instanceof String[]) {
      for(String s : (String[]) packages) {
        if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
        else packageImportsToAdd.add(s + suffix);
      }
    } else {
      BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
      for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
        packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
      }
    }
  }

The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

Posted by "Brian DePradine (Updated) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ARIES-808?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Brian DePradine updated ARIES-808:
----------------------------------

    Attachment: patch.txt

Adding a patch to address this issue
                
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Priority: Critical
>         Attachments: patch.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

Posted by "Brian DePradine (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ARIES-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13187141#comment-13187141 ] 

Brian DePradine commented on ARIES-808:
---------------------------------------

Hi Tim,

Thanks for the response. I did consider your suggested solution, but the problem that I have is that the packages are exported by the surrogate bundle in the composite framework. Unfortunately, I don't know the bundle symbolic name of the surrogate bundle at the time that the packages are added as a property of the persistence provider service, as it is generated based on the application that is installed.
                
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Priority: Critical
>         Attachments: patch.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

Posted by "Timothy Ward (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ARIES-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13188766#comment-13188766 ] 

Timothy Ward commented on ARIES-808:
------------------------------------

If I interpret your last comment correctly, would adding the weaving packages property to your service (without a bundle symbolic name attribute) and changing:

if(packages instanceof String[]) {
      for(String s : (String[]) packages) {
        if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
        else packageImportsToAdd.add(s + suffix);
      } 

to :

if(packages instanceof String[]) {
      for(String s : (String[]) packages) {
        packageImportsToAdd.add(s);
      } 

work for you?

It's much less invasive to the code, doesn't add any special knowledge of composites, and as there hasn't been a release of the JPA weaving function it can't break any existing releases. As you can use the Composite to control which imports are available through the Surrogate it gives exactly the same level of control. What do you think?
                
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Priority: Critical
>         Attachments: patch.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Resolved] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

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

Timothy Ward resolved ARIES-808.
--------------------------------

       Resolution: Fixed
    Fix Version/s: 0.4

Code fixed as per discussion. Unit tests refactored to provide more specific result reporting, added one new test to verify the fix.
                
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Assignee: Timothy Ward
>            Priority: Critical
>             Fix For: 0.4
>
>         Attachments: patch.txt, patch.txt, patch2.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Assigned] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

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

Timothy Ward reassigned ARIES-808:
----------------------------------

    Assignee: Timothy Ward
    
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Assignee: Timothy Ward
>            Priority: Critical
>         Attachments: patch.txt, patch.txt, patch2.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

Posted by "Timothy Ward (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ARIES-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13186821#comment-13186821 ] 

Timothy Ward commented on ARIES-808:
------------------------------------

Hi Brian,

Having reviewed the patch I have significant reservations about adding it to the codebase. Composites are a deprecated feature of Eclipse, that are entirely replaced by Resolver Hooks. I would not want to add more complex code to special case the structure of your environment.

There is also a much simpler fix for your issue - you highighted the following code:

 if(packages instanceof String[]) {
      for(String s : (String[]) packages) {
        if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
        else packageImportsToAdd.add(s + suffix);
      }
    }

Looking closely, wouldn't the simplest fix for you be to add the weaving packages property (complete with bundle-symbolicname attributes) to your Persistence Provider service? This would not need any change to the JPA container, and is how it was intended to be used.

Tim
                
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Priority: Critical
>         Attachments: patch.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

Posted by "Brian DePradine (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/ARIES-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13189125#comment-13189125 ] 

Brian DePradine commented on ARIES-808:
---------------------------------------

Hi Tim,

That change would work for me. My proposed fix was an attempt to avoid the suffix so removing it entirely would be good.
                
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Priority: Critical
>         Attachments: patch.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

Posted by "Brian DePradine (Updated) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ARIES-808?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Brian DePradine updated ARIES-808:
----------------------------------

    Attachment: patch.txt

Adding a new patch that takes into account the discussion that I have had with Tim
                
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Priority: Critical
>         Attachments: patch.txt, patch.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles

Posted by "Brian DePradine (Updated) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/ARIES-808?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Brian DePradine updated ARIES-808:
----------------------------------

    Attachment: patch2.txt

Adding new patch containing test modification
                
> Problem with JPAWeavingHook in an environment that uses Composite Bundles
> -------------------------------------------------------------------------
>
>                 Key: ARIES-808
>                 URL: https://issues.apache.org/jira/browse/ARIES-808
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>         Environment: I am using Equinox org.eclipse.osgi_3.7.2.R37x_v20111028-1418.jar with Apache Aries revision 1187719
>            Reporter: Brian DePradine
>            Priority: Critical
>         Attachments: patch.txt, patch.txt, patch2.txt
>
>
> When running my OSGi application that uses JPA I get the following error:
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at com.ibm.osgi.jpa.jpa2.TestTools.run(TestTools.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
> 	at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)
> 	at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)
> 	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)
> 	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
> 	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
> 	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
> 	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:149)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:109)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:218)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
> 	at java.lang.Thread.run(Thread.java:736)
> Caused by: java.lang.NoClassDefFoundError: org.apache.openjpa.enhance.PersistenceCapable
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
> 	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:172)
> 	at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1552)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1528)
> 	at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1506)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:282)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:50)
> 	at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:35)
> 	at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:65)
> 	at Proxy476b6bea_8a4d_42a3_ba7d_e0257275a826.createEntityManager(Unknown Source)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.primeDB(NewAPITest.java:86)
> 	at com.ibm.osgi.jpa.jpa2.NewAPITest.before(NewAPITest.java:35)
> 	... 31 more
> Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.enhance.PersistenceCapable
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
> 	... 62 more
> I am using Apache Aries with Composite Bundles in order to run my application. Due to the fact that we are using OSGi 4.3 we are using the JPAWeavingHook to perform load time enhancement of our entities. The JPAWeavingHook makes use of the org.apache.aries.jpa.container.weaving.impl.WrappingTransformer to help it determine which packages need to be added as dynamic imports. It contains the following code:
>   public WrappingTransformer(ClassTransformer delegate,
>       ServiceReference<?> persistenceProvider) {
>     if(delegate == null) 
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.transformer"));
>     
>     if(persistenceProvider == null) {
>       throw new NullPointerException(NLS.MESSAGES.getMessage("jpa.weaving.null.provider"));
>     }
>     
>     this.delegate = delegate;
>     
>     Object packages = persistenceProvider.getProperty("org.apache.aries.jpa.container.weaving.packages");
>     
>     Bundle provider = persistenceProvider.getBundle();
>     String suffix = ";" + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" +
>     provider.getSymbolicName() + ";" + Constants.BUNDLE_VERSION_ATTRIBUTE 
>     + "=" + provider.getVersion();
>     
>     if(packages instanceof String[]) {
>       for(String s : (String[]) packages) {
>         if (s.contains(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE)) packageImportsToAdd.add(s);
>         else packageImportsToAdd.add(s + suffix);
>       }
>     } else {
>       BundleRevision br = provider.adapt(BundleWiring.class).getRevision();
>       for(BundleCapability bc : br.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
>         packageImportsToAdd.add(bc.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE) + suffix);
>       }
>     }
>   }
> The problem is that the suffix is meant to tie the dynamic imports to the persistence provider bundle so that they only work if the packages come from that bundle. When using Composite Bundles, however, the bundle that provides those packages will be the surrogate bundle and not the original persistence provider bundle. This results in the ClassNotFoundException listed above. As a workaround I can remove the suffix so that the imports can be used from any bundle, but I am not sure what the long term fix should be that would allow the JPAWeavingHook to work both with and without Composite Bundles.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira