You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Frank Blom (JIRA)" <ji...@apache.org> on 2017/11/24 10:35:01 UTC

[jira] [Commented] (FELIX-5563) Adding extension bundles causes wildfy/tomcat server to fail

    [ https://issues.apache.org/jira/browse/FELIX-5563?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16265142#comment-16265142 ] 

Frank Blom commented on FELIX-5563:
-----------------------------------

After seeing the update of the framework 5.6.10 we again decided to try getting extension bundles to work again, focusing more on the tomcat server. 
Our OSGi container runs inside our tomcat server. When the OSGi container is started with an extension bundle deployed, startup fails with following exception:

{quote}ERROR: Bundle org.apache.felix.framework [0] EventDispatcher: Error during dispatch. (java.lang.IllegalStateException: Invalid BundleContext.)
java.lang.IllegalStateException: Invalid BundleContext.
	at org.apache.felix.framework.BundleContextImpl.checkValidity(BundleContextImpl.java:511)
	at org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:451)
	at org.osgi.util.tracker.ServiceTracker.addingService(ServiceTracker.java:414)
	at org.apache.felix.http.proxy.DispatcherTracker.addingService(DispatcherTracker.java:50)
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
	at org.apache.felix.framework.EventDispatcher$4.run(EventDispatcher.java:983)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:978)
	at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
	at org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
	at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4595)
	at org.apache.felix.framework.Felix.registerService(Felix.java:3587)
	at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
	at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:322)
	at org.apache.felix.http.bridge.internal.BridgeActivator.doStart(BridgeActivator.java:50)
	at org.apache.felix.http.base.internal.AbstractActivator.start(AbstractActivator.java:41)
	at org.apache.felix.framework.util.SecureAction$Actions.run(SecureAction.java:1709)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:688)
	at org.apache.felix.framework.Felix.activateBundle(Felix.java:2240)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2146)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1373)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.lang.Thread.run(Thread.java:748){quote}
	
When I debug trough the process it seems like the extension bundle is picked up and handled by the DefaultClassLoaderExtender in the ExtensionManager.
The DefaultClassLoaderExtender recognizes that the Tomcat ParallelWebappClassLoader is a subclass of UrlClassLoader.
However, during starting/resolving the bundle, the above validation check fails. 

I'm assuming the Felix framework library can be upgraded without the need to upgrade other Felix libraries. The versions that are used:

    "org.apache.felix:org.apache.felix.configadmin": "1.2.8",
    "org.apache.felix:org.apache.felix.dependencymanager": "3.1.0",
    "org.apache.felix:org.apache.felix.fileinstall": "3.2.4",
    "org.apache.felix:org.apache.felix.framework": "5.6.10",
    "org.apache.felix:org.apache.felix.http.api": "2.2.2",
    "org.apache.felix:org.apache.felix.http.bridge": "2.2.2",
    "org.apache.felix:org.apache.felix.http.proxy": "2.2.0",
    "org.apache.felix:org.apache.felix.main": "5.6.10",
	
The extension bundle does start correctly in a standalone Felix 5.6.10 framework. There it works fine and the bundle behaves as expected.

> Adding extension bundles causes wildfy/tomcat server to fail
> ------------------------------------------------------------
>
>                 Key: FELIX-5563
>                 URL: https://issues.apache.org/jira/browse/FELIX-5563
>             Project: Felix
>          Issue Type: Improvement
>          Components: Framework
>    Affects Versions: framework-5.6.2
>         Environment: wildfly - 10.0, tomcat - 8.5
>            Reporter: Frank Blom
>            Priority: Minor
>
> I am trying to implement extension bundles in the osgi container. We are using a wildfly and tomcat server. Starting the wildfly server with the added extension bundle causes the following errors:
> 1:
> 2017-02-22 14:36:55,916 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) Failed to install artifact: C:\ws\Servers\jboss\standalone\bundles\planon\ch.meschberger.sample.extension-0.0.1.jar: org.osgi.framework.BundleException: Could not create bundle object.
> 2017-02-22 14:36:55,917 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) org.osgi.framework.BundleException: Could not create bundle object.
> 2017-02-22 14:36:55,917 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.framework.Felix.installBundle(Felix.java:2960)
> 2017-02-22 14:36:55,917 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:165)
> 2017-02-22 14:36:55,917 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.installOrUpdateBundle(DirectoryWatcher.java:1027)
> 2017-02-22 14:36:55,917 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:941)
> 2017-02-22 14:36:55,917 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:854)
> 2017-02-22 14:36:55,917 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:483)
> 2017-02-22 14:36:55,918 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)
> 2017-02-22 14:36:55,918 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) Caused by: java.lang.UnsupportedOperationException: Unable to add extension bundle to FrameworkClassLoader - Maybe not an URLClassLoader?
> 2017-02-22 14:36:55,918 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.framework.ExtensionManager.addExtensionBundle(ExtensionManager.java:397)
> 2017-02-22 14:36:55,918 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	at org.apache.felix.framework.Felix.installBundle(Felix.java:2926)
> 2017-02-22 14:36:55,918 INFO  [stdout] (fileinstall-C:\ws\Servers\jboss\standalone\bundles\planon) 	... 6 more
> 2:
> 2017-02-22 14:29:46,307 INFO  [stdout] (FelixStartLevel) Failed to install artifact: C:\ws\Servers\jboss\standalone\bundles\planon\ch.meschberger.sample.extension-0.0.1.jar: org.osgi.framework.BundleException: Could not create bundle object.
> 2017-02-22 14:29:46,308 INFO  [stdout] (FelixStartLevel) org.osgi.framework.BundleException: Could not create bundle object.
> 2017-02-22 14:29:46,308 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.Felix.installBundle(Felix.java:2960)
> 2017-02-22 14:29:46,308 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:165)
> 2017-02-22 14:29:46,309 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.installOrUpdateBundle(DirectoryWatcher.java:1027)
> 2017-02-22 14:29:46,309 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:941)
> 2017-02-22 14:29:46,309 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:854)
> 2017-02-22 14:29:46,309 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:483)
> 2017-02-22 14:29:46,309 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.fileinstall.internal.DirectoryWatcher.start(DirectoryWatcher.java:224)
> 2017-02-22 14:29:46,309 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.fileinstall.internal.FileInstall.updated(FileInstall.java:252)
> 2017-02-22 14:29:46,309 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.fileinstall.internal.FileInstall.start(FileInstall.java:139)
> 2017-02-22 14:29:46,309 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
> 2017-02-22 14:29:46,310 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.Felix.activateBundle(Felix.java:2154)
> 2017-02-22 14:29:46,310 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.Felix.startBundle(Felix.java:2072)
> 2017-02-22 14:29:46,310 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1299)
> 2017-02-22 14:29:46,310 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
> 2017-02-22 14:29:46,310 INFO  [stdout] (FelixStartLevel) 	at java.lang.Thread.run(Thread.java:745)
> 2017-02-22 14:29:46,310 INFO  [stdout] (FelixStartLevel) Caused by: java.lang.UnsupportedOperationException: Unable to add extension bundle to FrameworkClassLoader - Maybe not an URLClassLoader?
> 2017-02-22 14:29:46,311 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.ExtensionManager.addExtensionBundle(ExtensionManager.java:397)
> 2017-02-22 14:29:46,311 INFO  [stdout] (FelixStartLevel) 	at org.apache.felix.framework.Felix.installBundle(Felix.java:2926)
> 2017-02-22 14:29:46,311 INFO  [stdout] (FelixStartLevel) 	... 14 more
> It seems that it goes wrong in the extensionManager class around here:
> {code:title=ExtensionManager.class|borderStyle=solid}
> try
>             {
>                 extensionManager = new ExtensionManager();
>                 Felix.m_secureAction.addURLToURLClassLoader(Felix.m_secureAction.createURL(
>                     Felix.m_secureAction.createURL(null, "http:", extensionManager),
>                     "http://felix.extensions:9/", extensionManager),
>                     Felix.class.getClassLoader());
>             }
> {code}
> And in the the addURLtoIRLClassLoader it expects a urlclassloader but this is not provided because of wildfly/tomcat. That happens here:
> {code:title=SecureAction.class|borderStyle=solid}
> public void addURLToURLClassLoader(URL extension, ClassLoader loader) throws Exception
>     {
>         if (System.getSecurityManager() != null)
>         {
>             Actions actions = (Actions) m_actions.get();
>             actions.set(Actions.ADD_EXTENSION_URL_ACTION, extension, loader);
>             try
>             {
>                 AccessController.doPrivileged(actions, m_acc);
>             }
>             catch (PrivilegedActionException e)
>             {
>                 throw e.getException();
>             }
>         }
>         else
>         {
>             Method addURL =
>                 URLClassLoader.class.getDeclaredMethod("addURL",
>                 new Class[] {URL.class});
>             addURL.setAccessible(true);
>             addURL.invoke(loader, new Object[]{extension});
>         }
>     }
> {code}
> If you have any questions, let me know.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)