code: protected WsMessageRouterImpl getMessageRouter() {
          if (msgRouter == null) {
              // First activation.
              msgRouter = MessageRouterSingleton.singleton;
  
              // Pass the MessageRouter to the TrService via the TrConfigurator.
              TrConfigurator.setMessageRouter(msgRouter);
  
              // Register this guy as a BundleListener, looking for new Bundles as they
              // are added to the framework.  Then process the already-installed bundles. 
              // We are looking for any /META-INF/MessageRouter.properties files defined
              // in the bundles.  Note: it's possible (tho unlikely) that multiple threads
              // could be running this code at the same time.  This is not a problem.
              // The msgRouter will be informed of duplicate MessageRouter.properties
              // entries, but it can handle that. One thing to note, howerver, is that the 
              // natural ordering of Bundles may get messed up by the BundleListener. The 
              // BundleListener is registered before we process the initial bundle set 
              // (which we must do, otherwise we risk missing the arrival of a bundle between 
              // the time we're processing the initial set and the time we register the 
              // BundleListener). However, if the BundleListener receives a "bundle installed" 
              // event asynchronously while we're still processing the initial set, that newly 
              // installed bundle's MessageRouter properties may get overridden by a bundle 
              // from the initial set, which would violate the policy that the properties are 
              // applied in the order by which the bundles were started. So we're stuck between 
              // a rock and a hard place. Not sure what to do about that. 
              bundleContext.addBundleListener(this);
              processInitialBundles();
          }
  
          return msgRouter;
      }
docs: Lazy activation and retrieval of the MessageRouter.