[ https://issues.apache.org/jira/browse/FELIX-3153?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13124431#comment-13124431 ]
Richard S. Hall commented on FELIX-3153: ---------------------------------------- Ok, I hacked up ServiceMix to run with framework 4.0.0...the difficult part is that they provide their own OSGi API classes instead of using the ones coming from the framework...this is probably not a smart thing since frameworks are free to make implementation-specific adaptations to the OSGi API implementations, so you cannot be sure that a given framework will work properly with the original OSGi JARs. At any rate... I was able to reproduce similar issues. In the end, I believe I understand at least some aspect of what is going wrong. When refreshing bundles, the Felix framework is stopping and refreshing bundles one at a time, when in fact it should be stopping them all first, then refreshing them all in a separate pass, and finally restarting them again in a third pass. So, I will commit a patch to do just that and change the subject of this bug to more accurately reflect the issue. Unfortunately, it doesn't appear to make the refresh of the spring context bundle work correctly, but at least the error is more consistent and controlled. I regularly see this: ERROR: Bundle org.apache.servicemix.jbi.osgi [123] EventDispatcher: Error during dispatch. (org.apache.servicemix.nmr.api.ServiceMixException: Unable to register service servicemix-wsn2005 with properties {NAME=servicemix-wsn2005, objectClass=[Ljava.lang.String;@2cf9f1b5, service.id=725, TYPE=service-engine}. Reason: javax.jbi.JBIException: Error calling init) org.apache.servicemix.nmr.api.ServiceMixException: Unable to register service servicemix-wsn2005 with properties {NAME=servicemix-wsn2005, objectClass=[Ljava.lang.String;@2cf9f1b5, service.id=725, TYPE=service-engine}. Reason: javax.jbi.JBIException: Error calling init at org.apache.servicemix.nmr.core.ServiceRegistryImpl.register(ServiceRegistryImpl.java:52) at org.apache.servicemix.nmr.osgi.OsgiServiceRegistryTracker.addingService(OsgiServiceRegistryTracker.java:78) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:980) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:906) at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:262) at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:234) at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:941) at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932) at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793) at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543) at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4250) at org.apache.felix.framework.Felix.registerService(Felix.java:3275) at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346) at org.apache.servicemix.jbi.deployer.impl.Deployer.registerService(Deployer.java:762) at org.apache.servicemix.jbi.deployer.impl.Deployer.registerComponent(Deployer.java:418) at org.apache.servicemix.jbi.deployer.impl.ComponentInstaller.initComponent(ComponentInstaller.java:424) at org.apache.servicemix.jbi.deployer.impl.ComponentInstaller.install(ComponentInstaller.java:150) at org.apache.servicemix.jbi.deployer.impl.Deployer.registerDeployedComponent(Deployer.java:657) at org.apache.servicemix.jbi.deployer.impl.Deployer$1.addingService(Deployer.java:222) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:980) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:906) at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:262) at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:234) at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:941) at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932) at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793) at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543) at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4250) at org.apache.felix.framework.Felix.registerService(Felix.java:3275) at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346) at org.apache.aries.blueprint.container.BlueprintContainerImpl.registerService(BlueprintContainerImpl.java:388) at org.apache.aries.blueprint.container.ServiceRecipe.register(ServiceRecipe.java:166) at org.apache.aries.blueprint.container.BlueprintContainerImpl.registerServices(BlueprintContainerImpl.java:646) at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:314) at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:213) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:680) Caused by: javax.jbi.JBIException: Error calling init at org.apache.servicemix.common.AsyncBaseLifeCycle.init(AsyncBaseLifeCycle.java:213) at org.apache.servicemix.jbi.deployer.artifacts.ComponentImpl$ComponentWrapper.init(ComponentImpl.java:247) at org.apache.servicemix.jbi.runtime.impl.ComponentRegistryImpl.doRegister(ComponentRegistryImpl.java:89) at org.apache.servicemix.jbi.runtime.impl.ComponentRegistryImpl.doRegister(ComponentRegistryImpl.java:38) at org.apache.servicemix.nmr.core.ServiceRegistryImpl.register(ServiceRegistryImpl.java:47) ... 42 more Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35) at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:286) at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:230) at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:178) at org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:137) at org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:121) at org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:92) at $javax.jms.ConnectionFactory$$EnhancerByCGLIB$$786945a.createConnection(<generated>) at org.apache.servicemix.wsn.jms.JmsNotificationBroker.init(JmsNotificationBroker.java:48) at org.apache.servicemix.wsn.component.WSNComponent.doInit(WSNComponent.java:147) at org.apache.servicemix.common.AsyncBaseLifeCycle.init(AsyncBaseLifeCycle.java:205) ... 46 more Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) at java.net.Socket.connect(Socket.java:529) at org.apache.activemq.transport.tcp.TcpTransport.connect(TcpTransport.java:484) at org.apache.activemq.transport.tcp.TcpTransport.doStart(TcpTransport.java:447) at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53) at org.apache.activemq.transport.InactivityMonitor.start(InactivityMonitor.java:127) at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58) at org.apache.activemq.transport.WireFormatNegotiator.start(WireFormatNegotiator.java:72) at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58) at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58) at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:266) ... 55 more > refreshPackages on certain bundles can create a mess > ---------------------------------------------------- > > Key: FELIX-3153 > URL: https://issues.apache.org/jira/browse/FELIX-3153 > Project: Felix > Issue Type: Bug > Affects Versions: framework-3.0.9, framework-3.2.2 > Reporter: Ioannis Canellos > Fix For: framework-4.0.1 > > > When using refreshPackages on a bundle that is used by a lot of other > bundles, it results in error. > There is no deterministic behavior and the error is not always the same, even > if I repeat the exact same test twice. > A typical example on how I reproduce it is to refresh the spring-context > bundle inside servicemix 4.4 (running on felix). > If I switch to equinox I don't have that issue. That doesn't say much, but I > mention it to exclude other possibilities. > From my logs I see that Felix tries to refresh the bundles in the populated > graph with a different order each time (I don't know if this helps > identifying the issue). > Usually, the error looks like this: > ERROR: Bundle org.springframework.osgi.extender [83] Error stopping bundle. > (java.lang.NoClassDefFoundError: org/osgi/framework/ServiceRegistration) > java.lang.NoClassDefFoundError: org/osgi/framework/ServiceRegistration > at > org.springframework.osgi.util.OsgiServiceUtils.unregisterService(OsgiServiceUtils.java:41) > at > org.springframework.osgi.extender.internal.support.NamespaceManager.unregisterResolverService(NamespaceManager.java:195) > at > org.springframework.osgi.extender.internal.support.NamespaceManager.destroy(NamespaceManager.java:223) > at > org.springframework.osgi.extender.internal.activator.ContextLoaderListener.shutdown(ContextLoaderListener.java:547) > at > org.springframework.osgi.extender.internal.activator.ContextLoaderListener.stop(ContextLoaderListener.java:431) > at > org.apache.felix.framework.util.SecureAction.stopActivator(SecureAction.java:651) > at org.apache.felix.framework.Felix.stopBundle(Felix.java:2216) > at org.apache.felix.framework.Felix$RefreshHelper.stop(Felix.java:4489) > at org.apache.felix.framework.Felix.refreshPackages(Felix.java:3581) > at > org.apache.felix.framework.PackageAdminImpl.run(PackageAdminImpl.java:363) > at java.lang.Thread.run(Thread.java:680) > Caused by: java.lang.ClassNotFoundException: > org.osgi.framework.ServiceRegistration not found by > org.springframework.osgi.core [80] > at > org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787) > at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71) > at > org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768) > at java.lang.ClassLoader.loadClass(ClassLoader.java:247) > ... 11 more -- 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