Bug #29

remote installation of bundle fails if same bundle with different version is installed

Added by Jörg Plewe almost 2 years ago. Updated almost 2 years ago.

Status:Resolved Start:03/03/2010
Priority:Normal Due date:
Assigned to:Jörg Plewe % Done:

0%

Category:Weaving
Target version:0.5.4

Description

Situation: testbundle 0.5.2 is running locally, testbundle 0.5.4 remote

Calling testbundle leads to a problem on the remote side. Seems it has to do with issues when weaving the class while it is loaded. 'frozen'

If the bundle is not installed remotely, this issue doesn't show up.

Stopping BundleBee TestBundle...

ERROR: Resolver: Start error - org.bundlebee.testbundle
org.osgi.framework.BundleException: Exception in org.bundlebee.testbundle.impl.Activator.start() of bundle org.bundlebee.testbundle.
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:1028)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:984)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:265)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:257)
at org.apache.felix.bundlerepository.ResolverImpl.deploy(ResolverImpl.java:558)
at org.bundlebee.carrier.impl.CarrierImpl.deploy(CarrierImpl.java:90)
at org.bundlebee.manager.impl.ManagerImpl.install(ManagerImpl.java:146)
at org.bundlebee.manager.impl.ManagerImpl$HttpServiceTracker$1.post(ManagerImpl.java:383)
at org.bundlebee.manager.impl.BundleLifecycleServlet.doPost(BundleLifecycleServlet.java:46)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:616)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at org.eclipse.equinox.http.ServletRegistration.service(ServletRegistration.java:83)
at org.eclipse.equinox.http.ServletRegistration.service(ServletRegistration.java:74)
at org.eclipse.equinox.http.HttpListener.handleConnection(HttpListener.java:238)
at org.eclipse.equinox.http.HttpConnection.run(HttpConnection.java:64)
at org.eclipse.equinox.http.HttpThread.run(HttpThread.java:126)
Caused by: java.lang.RuntimeException: org.bundlebee.testbundle.impl.TestBundleImpl: frozen class (cannot edit)
at javassist.ClassPool.checkNotFrozen(ClassPool.java:568)
at javassist.ClassPool.makeClass(ClassPool.java:684)
at javassist.ClassPool.makeClass(ClassPool.java:658)
at org.bundlebee.weaver.equinox.Weaver.weaveClass(Weaver.java:76)
at org.bundlebee.weaver.equinox.BundleBeeClassLoadingHook.processClass(BundleBeeClassLoadingHook.java:107)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:549)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:524)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:455)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:443)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:423)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:193)
at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:368)
at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:444)
at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:397)
at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:385)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:87)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at org.bundlebee.testbundle.impl.Activator.start(Activator.java:21)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:1009)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:1003)

History

Updated by Jörg Plewe almost 2 years ago

  • Status changed from New to Resolved

Fixed with r242.

Create a new ClassPool per weaved class.
Obviously makeClass() does not work for different classes (from different bundle versions) with the same name on a single ClassPool instance (leads to 'frozen class' error). It does not remove the necessity to configure the ClassPool.getDefault() in the static area above.

Also available in: Atom PDF