ServiceMix NMR
  1. ServiceMix NMR
  2. SMX4NMR-310

NMR Registration Fails on Startup Intermittently

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Critical Critical
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Labels:
      None
    • Environment:

      Fuse 4.3

    • Regression:
      Regression

      Description

      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.

      1. sm-2011-testcase.zip
        20 kB
        Kurt Westerfeld

        Activity

          People

          • Assignee:
            Unassigned
            Reporter:
            Kurt Westerfeld
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:

              Development