Return-Path: X-Original-To: apmail-aries-dev-archive@www.apache.org Delivered-To: apmail-aries-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6E5A3909E for ; Mon, 23 Jan 2012 13:29:05 +0000 (UTC) Received: (qmail 65182 invoked by uid 500); 23 Jan 2012 13:29:05 -0000 Delivered-To: apmail-aries-dev-archive@aries.apache.org Received: (qmail 65134 invoked by uid 500); 23 Jan 2012 13:29:04 -0000 Mailing-List: contact dev-help@aries.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@aries.apache.org Delivered-To: mailing list dev@aries.apache.org Received: (qmail 65126 invoked by uid 99); 23 Jan 2012 13:29:04 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 23 Jan 2012 13:29:04 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.116] (HELO hel.zones.apache.org) (140.211.11.116) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 23 Jan 2012 13:29:02 +0000 Received: from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116]) by hel.zones.apache.org (Postfix) with ESMTP id 6F34515E61E for ; Mon, 23 Jan 2012 13:28:42 +0000 (UTC) Date: Mon, 23 Jan 2012 13:28:42 +0000 (UTC) From: "Brian DePradine (Updated) (JIRA)" To: dev@aries.apache.org Message-ID: <1939489399.66719.1327325322496.JavaMail.tomcat@hel.zones.apache.org> In-Reply-To: <459044276.25546.1326205601217.JavaMail.tomcat@hel.zones.apache.org> Subject: [jira] [Updated] (ARIES-808) Problem with JPAWeavingHook in an environment that uses Composite Bundles MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ 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