NMR Registration Fails on Startup Intermittently
------------------------------------------------

                 Key: SM-2011
                 URL: https://issues.apache.org/activemq/browse/SM-2011
             Project: ServiceMix
          Issue Type: Bug
         Environment: Fuse 4.3
            Reporter: Kurt Westerfeld
            Priority: Critical


We have a number of services which start when servicemix starts, based on 
servicemix-cxf-se, which publish endpoints to the NMR implicitly by using 
org.apache.servicemix.common.osgi.EndpointExporter.  We are seeing the 
situation where after startup, some of our services are missing from the 
endpoint registry.  We cannot see them using the admin command "nmr:list", and 
in tracking this down, have noticed that the 
org.apache.servicemix.nmr.core.EndpointRegistryImpl does not contain a mapping 
for the service.  This is clearly a bug, because if we do an osgi:restart on 
the bundle containing our service the NMR will correctly register the endpoints.

This is obviously causing us concern.  We have worked around other 
initialization problems with our servicemix-cxf-se services related to 
generation of proxies by injecting the component registry 
(org.apache.servicemix.jbi.runtime.ComponentRegistry) to the proxy.  We are 
wondering if there is a similar workaround we must perform in order to ensure 
our components do not initialize before the NMR service registry tracker is 
ready to receive them.

Noticing a normal initialization sees this stacktrace fragment:

        
org.apache.servicemix.nmr.core.EndpointRegistryImpl.register(org.apache.servicemix.nmr.api.Endpoint,
 java.util.Map<java.lang.String,?>) line: 115       
        
org.apache.servicemix.nmr.core.EndpointRegistryImpl.register(java.lang.Object, 
java.util.Map) line: 49  
        
org.apache.servicemix.nmr.osgi.OsgiServiceRegistryTracker<T>.addingService(org.osgi.framework.ServiceReference)
 line: 78        

So, it seems that the org.apache.servicemix.nmr.osgi.OsgiServiceRegistryTracker 
listener must be getting initialized *after* our own bundle in this case.  
Since this class registers a service tracker, it is my bet that it is not 
tracking services before our service's endpoint exporter has started running.  
In another odd twist, the main culprit in our use case exports 3 services, and 
only one of them seems to be missing.

The complexity of getting our services to start properly and reliably has been 
the most significant issue facing us in our port from servicemix 3 to 4.  We'd 
appreciate some help and/or fixes to get us moving in the right direction.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to