Bug #29
remote installation of bundle fails if same bundle with different version is installed
| Status: | Resolved | Start: | 03/03/2010 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assigned to: | % 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.