Hi everyone, I work for a company that have been using Felix with Java Web Start in a core product for several years. Thus, we have recently encountered the security warning discussed on this mailing list and in the issue below:
https://issues.apache.org/jira/browse/FELIX-4281 I have been looking into this now and then for the past few weeks, and I have a small toy-example that reproduces the problem. For a while I thought we had a problem somewhere in our code, or maybe something was wrong with Java Web Start (that would not the the first time ...), but I am beginning to think we're dealing with a bug in Felix. I do not understand all aspects of the problem, but I have found that removing a few lines of code from org/apache/felix/framework/ExtensionManager.java makes the problem go away: // Felix.m_secureAction.addURLToURLClassLoader(Felix.m_secureAction.createURL( // Felix.m_secureAction.createURL(null, "http:", extensionManager), // "http://felix.extensions:9/", extensionManager), // Felix.class.getClassLoader()); The code seems to have something to do with OSGi extension bundles. We don't use them anyway. Thus, we can live with that fix. However, this is probably not a solution for everyone. The code I have removed adds the special "http://felix.extensions:9/" URL to an URLClassLoader. It seems that this URL causes problems when Java Web Start performs security checks. I got suspicious about this when I got the following in my Java Web Start log: security: JAVAWS AppPolicy Permission requested for: http://felix.extensions:9/ ruleset: finding Deployment Rule Set for title: null location: null main location: http://felix.extensions:9/ main version: null isArtifact: true The main location does not look like the main location of other jar files in the log. That made me stumble upon an old issue from 2011 (https://issues.apache.org/jira/browse/FELIX-2780). In the comments Ingo Bauersachs suggested to replace "http" with some other protocol descriptor. I have tried to do the same, but it does not remove the security warnings. However, when I remove the lines as suggested above, my log looks like this: Security: JAVAWS AppPolicy Permission requested for: http://localhost:8000/felix.jar ruleset: finding Deployment Rule Set for title: Webstart Felix location: http://localhost:8000/wsf.jnlp main location: http://localhost:8000/felix.jar main version: null isArtifact: true I have tried looking into org/apache/felix/framework/util/SecureAction.java to see if I would somehow come up with a less radical fix. I have failed to do so until now, but maybe someone with a deeper knowledge of Felix could figure something out? My small toy program is a very simple one. It looks like this: public static void main(String[] args) throws Exception { System.out.println("Bootstrapper running"); System.out.println("Press '5' to enable more logging in your " + "Java Webstart Console (you've got 3 seconds)."); for(int i = 3; i > 0; i--) { Thread.sleep(1000); System.out.println(i); } System.out.println("Starting Felix"); HashMap<String,String> cfg = new HashMap<String,String>(); //cfg.put("felix.service.urlhandlers", "false"); // tried this: it doesn't make a difference. Felix f = new Felix(cfg); f.init(); // <--- this is where the warning is shown f.start(); f.stop(); System.out.println("It worked!"); } My JNLP file looks like this: <?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="http://localhost:8000/" href="wsf.jnlp"> <information> <title>Webstart Felix</title> <vendor>Martin Rytter</vendor> <offline-allowed/> </information> <security> <all-permissions /> </security> <resources> <j2se version="1.7.0+" href="http://java.sun.com/products/autodl/j2se"/> <jar href="wsf.jar" main="true" /> <jar href="felix.jar" /> </resources> <application-desc name="Webstart Felix" main-class="wsf.Main" /> </jnlp> I use a JNLP template because this is what we do in our product. However, signing the plain old JNLP file would probably cause the same problem. My template looks like this: <?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="*" href="*"> <information> <title>*</title> <vendor>Martin Rytter</vendor> <offline-allowed/> </information> <security> <all-permissions /> </security> <resources> <j2se version="1.7.0+" href="http://java.sun.com/products/autodl/j2se"/> <jar href="wsf.jar" main="true" /> <jar href="felix.jar" /> </resources> <application-desc name="*" main-class="wsf.Main" /> </jnlp> The recent security updates prefer if you add some special entries to the manifests of all your jar files. Thus, I add the following entries to the felix.jar and wsf.jar: Codebase=* Permissions=all-permissions Trusted-Only=true Both my jar files are signed using our company's keystore. I you have trouble reproducing what I did above, I could remove the keystore from my example and share it with you. It would probably be possible to do the same with a self-signed certificate, but I have not tried that yet. I discovered the problem when using org.apache.felix.framework-4.0.3, but I have made my toy-example with the more recent org.apache.felix.framework-4.2.1. The two versions of Felix seem to have the same problem. I have tried to get a deeper understanding of the problem by making a threaddump when the security warning is shown. I didn't learn a lot from that, but I suspect someone with deep knowledge of Java Web Start or Felix would. The threaddump looks like this: Dump thread stack ... ---------------------------------------------------- 2013-10-25 09:01:25 Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.45-b08 mixed mode): "FelixDispatchQueue" prio=10 tid=0x00007f0924092000 nid=0x14f9 in Object.wait() [0x00007f099a68b000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007ae4ab7e0> (a java.util.ArrayList) at java.lang.Object.wait(Object.java:503) at org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:1063) - locked <0x00000007ae4ab7e0> (a java.util.ArrayList) at org.apache.felix.framework.util.EventDispatcher.access$000(EventDispatcher.java:54) at org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:101) at java.lang.Thread.run(Thread.java:744) "javawsApplicationMain" prio=10 tid=0x00007f09380be000 nid=0x14f8 in Object.wait() [0x00007f092fb73000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1c1a5c8> (a java.lang.Object) at java.lang.Object.wait(Object.java:503) at com.sun.javaws.ui.JavawsSysRun.delegate(Unknown Source) - locked <0x00000007b1c1a5c8> (a java.lang.Object) at com.sun.deploy.util.DeploySysRun.execute(Unknown Source) at com.sun.deploy.util.DeploySysRun$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at com.sun.deploy.util.DeploySysRun.executePrivileged(Unknown Source) at com.sun.deploy.ui.UIFactory.showSSV3Dialog(Unknown Source) at com.sun.deploy.uitoolkit.impl.awt.ui.UIFactoryImpl.showSSV3Dialog(Unknown Source) at com.sun.deploy.security.SandboxSecurity.showUntrustedDialog(Unknown Source) at com.sun.deploy.security.SandboxSecurity.checkRunUntrusted(Unknown Source) at com.sun.deploy.security.SandboxSecurity.checkUnsignedSandboxSecurity(Unknown Source) - locked <0x00000007ae55f418> (a com.sun.deploy.util.SessionProperties) at com.sun.deploy.security.SandboxSecurity.isPermissionGranted(Unknown Source) at com.sun.javaws.security.AppPolicy.grantRestrictedAccess(Unknown Source) at com.sun.javaws.security.AppPolicy.addPermissions(Unknown Source) at com.sun.jnlp.JNLPClassLoader.getTrustedCodeSources(Unknown Source) at com.sun.deploy.security.CPCallbackHandler$ParentCallback.strategy(Unknown Source) at com.sun.deploy.security.CPCallbackHandler$ParentCallback.openClassPathElement(Unknown Source) - locked <0x00000007b1bd2948> (a com.sun.deploy.security.CPCallbackHandler$ParentCallback) at com.sun.deploy.security.DeployURLClassPath$UrlLoader.<init>(Unknown Source) at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source) at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source) - locked <0x00000007b1b022c0> (a com.sun.deploy.security.DeployURLClassPath) at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source) at java.net.URLClassLoader$1.run(URLClassLoader.java:358) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) - locked <0x00000007b1b015d0> (a com.sun.jnlp.JNLPClassLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:412) - locked <0x00000007b1b012e0> (a com.sun.jnlp.JNLPClassLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:190) at org.apache.felix.framework.BundleWiringImpl.<clinit>(BundleWiringImpl.java:1316) at org.apache.felix.framework.StatefulResolver.markResolvedRevisions(StatefulResolver.java:938) at org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:427) at org.apache.felix.framework.Felix.init(Felix.java:684) at wsf.Main.main(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.sun.javaws.Launcher.executeApplication(Unknown Source) at com.sun.javaws.Launcher.executeMainClass(Unknown Source) at com.sun.javaws.Launcher.doLaunchApp(Unknown Source) at com.sun.javaws.Launcher.run(Unknown Source) at java.lang.Thread.run(Thread.java:744) "AWT-EventQueue-2" prio=10 tid=0x00007f093c1ac000 nid=0x14f7 waiting on condition [0x00007f092f874000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000007b1b90088> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) at java.awt.EventQueue.getNextEvent(EventQueue.java:543) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) "Keep-Alive-Timer" daemon prio=10 tid=0x00007f09380b0800 nid=0x14f6 waiting on condition [0x00007f092fa76000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at sun.net.www.http.KeepAliveCache.run(KeepAliveCache.java:172) at java.lang.Thread.run(Thread.java:744) "Image Fetcher 0" daemon prio=10 tid=0x00007f093c178000 nid=0x14f4 in Object.wait() [0x00007f092f773000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1b90230> (a java.util.Vector) at sun.awt.image.ImageFetcher.nextImage(ImageFetcher.java:147) - locked <0x00000007b1b90230> (a java.util.Vector) at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:200) at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169) "ProgressReporter" daemon prio=10 tid=0x00007f0920003800 nid=0x14f1 in Object.wait() [0x00007f092f975000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1b902d8> (a java.util.ArrayList) at com.sun.javaws.progress.PreloaderDelegate$ProgressQueueChecker.run(Unknown Source) - locked <0x00000007b1b902d8> (a java.util.ArrayList) at java.lang.Thread.run(Thread.java:744) "TimerQueue" daemon prio=10 tid=0x00007f093c15b000 nid=0x14eb waiting on condition [0x00007f099812a000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000007b1b90370> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) at java.util.concurrent.DelayQueue.take(DelayQueue.java:209) at javax.swing.TimerQueue.run(TimerQueue.java:171) at java.lang.Thread.run(Thread.java:744) "ConsoleTraceListener" daemon prio=10 tid=0x00007f0938008000 nid=0x14ea in Object.wait() [0x00007f099822b000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1b90460> (a com.sun.deploy.uitoolkit.ui.ConsoleTraceListener$BoundedStringBuffer) at java.lang.Object.wait(Object.java:503) at com.sun.deploy.uitoolkit.ui.ConsoleTraceListener$ConsoleWriterThread.run(Unknown Source) - locked <0x00000007b1b90460> (a com.sun.deploy.uitoolkit.ui.ConsoleTraceListener$BoundedStringBuffer) "AWT-EventQueue-1" prio=10 tid=0x00007f0938006000 nid=0x14e8 waiting on condition [0x00007f099a586000] java.lang.Thread.State: RUNNABLE at com.sun.deploy.uitoolkit.ui.ConsoleHelper.dumpAllStacksImpl(Native Method) at com.sun.deploy.uitoolkit.ui.ConsoleHelper.dumpAllStacks(Unknown Source) at com.sun.deploy.uitoolkit.impl.awt.ui.SwingConsoleWindow$3.actionPerformed(Unknown Source) at javax.swing.JComponent$ActionStandin.actionPerformed(JComponent.java:3421) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1664) at javax.swing.JComponent.processKeyBinding(JComponent.java:2878) at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:307) at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250) at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2970) at javax.swing.JComponent.processKeyBindings(JComponent.java:2962) at javax.swing.JComponent.processKeyEvent(JComponent.java:2841) at java.awt.Component.processEvent(Component.java:6282) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727) at java.awt.Component.dispatchEventImpl(Component.java:4731) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:708) at java.awt.EventQueue$4.run(EventQueue.java:706) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) at java.security.AccessController.doPrivileged(Native Method) at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) at java.awt.Dialog.show(Dialog.java:1082) at java.awt.Component.show(Component.java:1651) at java.awt.Component.setVisible(Component.java:1603) at java.awt.Window.setVisible(Window.java:1014) at java.awt.Dialog.setVisible(Dialog.java:1005) at com.sun.deploy.ui.DialogHelper.setVisible(Unknown Source) at com.sun.deploy.ui.DialogTemplate$31.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) "DestroyJavaVM" prio=10 tid=0x00007f09b400a800 nid=0x14cd waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Javaws Secure Thread" daemon prio=10 tid=0x00007f09b42d3000 nid=0x14e6 in Object.wait() [0x00007f099a78c000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007ae6730c0> (a java.awt.EventQueue$1AWTInvocationLock) at java.lang.Object.wait(Object.java:503) at java.awt.EventQueue.invokeAndWait(EventQueue.java:1266) - locked <0x00000007ae6730c0> (a java.awt.EventQueue$1AWTInvocationLock) at java.awt.EventQueue.invokeAndWait(EventQueue.java:1247) at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1349) at com.sun.deploy.ui.DialogTemplate.setVisible(Unknown Source) at com.sun.deploy.ui.UIFactory$21.execute(Unknown Source) at com.sun.javaws.ui.JavawsSysRun$SecureThread.doWork(Unknown Source) at com.sun.javaws.ui.JavawsSysRun$SecureThread.run(Unknown Source) - locked <0x00000007b1c1a5c8> (a java.lang.Object) "AWT-EventQueue-0" prio=10 tid=0x00007f09b42d0800 nid=0x14e5 waiting on condition [0x00007f09a019c000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000007b1c1a650> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) at java.awt.EventQueue.getNextEvent(EventQueue.java:543) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) "AWT-Shutdown" prio=10 tid=0x00007f09b42cf000 nid=0x14e4 in Object.wait() [0x00007f09a8152000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1c1ac40> (a java.lang.Object) at java.lang.Object.wait(Object.java:503) at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:287) - locked <0x00000007b1c1ac40> (a java.lang.Object) at java.lang.Thread.run(Thread.java:744) "AWT-XAWT" daemon prio=10 tid=0x00007f09b423c000 nid=0x14e1 runnable [0x00007f09a97c1000] java.lang.Thread.State: RUNNABLE at sun.awt.X11.XToolkit.waitForEvents(Native Method) at sun.awt.X11.XToolkit.run(XToolkit.java:627) at sun.awt.X11.XToolkit.run(XToolkit.java:591) at java.lang.Thread.run(Thread.java:744) "Java2D Disposer" daemon prio=10 tid=0x00007f09b421a800 nid=0x14e0 in Object.wait() [0x00007f09a9cd2000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1b41440> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) - locked <0x00000007b1b41440> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) at sun.java2d.Disposer.run(Disposer.java:145) at java.lang.Thread.run(Thread.java:744) "CacheCleanUpThread" daemon prio=10 tid=0x00007f09b41d2000 nid=0x14df in Object.wait() [0x00007f09ab486000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1c59140> (a com.sun.deploy.cache.CleanupThread) at java.lang.Object.wait(Object.java:503) at com.sun.deploy.cache.CleanupThread.run(Unknown Source) - locked <0x00000007b1c59140> (a com.sun.deploy.cache.CleanupThread) "CacheMemoryCleanUpThread" daemon prio=10 tid=0x00007f09b41ce800 nid=0x14de in Object.wait() [0x00007f09ab587000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1d13ab8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) - locked <0x00000007b1d13ab8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) at com.sun.deploy.cache.MemoryCache$LoadedResourceCleanupThread.run(Unknown Source) "MemoryCache-DelayedCleanup" daemon prio=10 tid=0x00007f09b41cd000 nid=0x14dd in Object.wait() [0x00007f09ab688000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1d13b70> (a java.util.TaskQueue) at java.util.TimerThread.mainLoop(Timer.java:552) - locked <0x00000007b1d13b70> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:505) "traceMsgQueueThread" daemon prio=10 tid=0x00007f09b40c9000 nid=0x14dc runnable [0x00007f09abccd000] java.lang.Thread.State: RUNNABLE at java.lang.Throwable.getStackTraceElement(Native Method) at java.lang.System$2.getStackTraceElement(System.java:1201) at java.util.logging.LogRecord.inferCaller(LogRecord.java:535) at java.util.logging.LogRecord.getSourceClassName(LogRecord.java:305) at java.util.logging.XMLFormatter.format(XMLFormatter.java:131) at java.util.logging.StreamHandler.publish(StreamHandler.java:196) - locked <0x00000007b1d73e68> (a java.util.logging.FileHandler) at java.util.logging.FileHandler.publish(FileHandler.java:575) - locked <0x00000007b1d73e68> (a java.util.logging.FileHandler) at java.util.logging.Logger.log(Logger.java:610) at java.util.logging.Logger.doLog(Logger.java:631) at java.util.logging.Logger.log(Logger.java:654) at com.sun.deploy.trace.LoggerTraceListener.print(Unknown Source) at com.sun.deploy.trace.Trace.firePrintlnEvent(Unknown Source) at com.sun.deploy.trace.Trace.access$200(Unknown Source) at com.sun.deploy.trace.Trace$TraceMsgQueueChecker.run(Unknown Source) at java.lang.Thread.run(Thread.java:744) "Service Thread" daemon prio=10 tid=0x00007f09b4097000 nid=0x14d9 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread1" daemon prio=10 tid=0x00007f09b4094800 nid=0x14d8 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread0" daemon prio=10 tid=0x00007f09b4092000 nid=0x14d7 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Signal Dispatcher" daemon prio=10 tid=0x00007f09b4087800 nid=0x14d6 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Finalizer" daemon prio=10 tid=0x00007f09b4070800 nid=0x14d5 in Object.wait() [0x00007f09b0bfa000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1b99498> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) - locked <0x00000007b1b99498> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189) "Reference Handler" daemon prio=10 tid=0x00007f09b406c800 nid=0x14d4 in Object.wait() [0x00007f09b0cfb000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000007b1b98ee8> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:503) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) - locked <0x00000007b1b98ee8> (a java.lang.ref.Reference$Lock) "VM Thread" prio=10 tid=0x00007f09b406a000 nid=0x14d3 runnable "GC task thread#0 (ParallelGC)" prio=10 tid=0x00007f09b4020800 nid=0x14ce runnable "GC task thread#1 (ParallelGC)" prio=10 tid=0x00007f09b4022000 nid=0x14cf runnable "GC task thread#2 (ParallelGC)" prio=10 tid=0x00007f09b4024000 nid=0x14d0 runnable "GC task thread#3 (ParallelGC)" prio=10 tid=0x00007f09b4026000 nid=0x14d1 runnable "VM Periodic Task Thread" prio=10 tid=0x00007f09b40a2000 nid=0x14da waiting on condition ---------------------------------------------------- This is an issue that is really important to us. I will try to take my toy-example-solution and integrate it into our real system next week. We can probably live with that for a while, as we don't use extension bundles for anything. However, we would much prefer a more correct solution. Thus, if you need more information from me, I will be happy share whatever I know. I will also be happy to test any solution the Felix team might come up with on our system. Oh, btw. Thanks to everyone on the Felix team. We love your product! Cheers, Martin Rytter -- Martin Rytter - http://martin.ryt.dk --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@felix.apache.org For additional commands, e-mail: users-h...@felix.apache.org