[jboss-osgi-commits] JBoss-OSGI SVN: r93101 - projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service.

jboss-osgi-commits at lists.jboss.org jboss-osgi-commits at lists.jboss.org
Tue Sep 1 18:46:19 EDT 2009


Author: thomas.diesler at jboss.com
Date: 2009-09-01 18:46:19 -0400 (Tue, 01 Sep 2009)
New Revision: 93101

Modified:
   projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service/MicrocontainerServiceImpl.java
Log:
Remove dependency on ServiceTracker

Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service/MicrocontainerServiceImpl.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service/MicrocontainerServiceImpl.java	2009-09-01 22:43:36 UTC (rev 93100)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/service/MicrocontainerServiceImpl.java	2009-09-01 22:46:19 UTC (rev 93101)
@@ -44,8 +44,11 @@
 import org.jboss.osgi.spi.management.MicrocontainerServiceMBean;
 import org.jboss.osgi.spi.service.MicrocontainerService;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
 import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * An implementation of the {@link MicrocontainerService}.
@@ -77,45 +80,16 @@
       installKernelBean(BEAN_SYSTEM_BUNDLE_CONTEXT, sysContext);
       sysContext.registerService(MicrocontainerService.class.getName(), this, null);
 
-      // Track the MBeanServer and register this service as an MBean 
-      final MicrocontainerServiceMBean mbeanImpl = this;
-      ServiceTracker tracker = new ServiceTracker(sysContext, MBeanServer.class.getName(), null)
+      // Track the MBeanServer and register this service as an MBean
+      try
       {
-         @Override
-         public Object addingService(ServiceReference reference)
-         {
-            MBeanServer server = (MBeanServer)super.addingService(reference);
-            try
-            {
-               installKernelBean(BEAN_MBEAN_SERVER, server);
-               StandardMBean mbean = new StandardMBean(mbeanImpl, MicrocontainerServiceMBean.class);
-               server.registerMBean(mbean, MBEAN_MICROCONTAINER_SERVICE);
-            }
-            catch (Exception ex)
-            {
-               throw new IllegalStateException("Cannot register MicrocontainerServiceMBean", ex);
-            }
-            return server;
-         }
-
-         @Override
-         public void removedService(ServiceReference reference, Object service)
-         {
-            MBeanServer server = (MBeanServer)service;
-            try
-            {
-               if (server.isRegistered(MBEAN_MICROCONTAINER_SERVICE))
-                  server.unregisterMBean(MBEAN_MICROCONTAINER_SERVICE);
-            }
-            catch (Exception ex)
-            {
-               log.warn("Cannot unregister MicrocontainerServiceMBean", ex);
-            }
-            super.removedService(reference, service);
-         }
-
-      };
-      tracker.open();
+         String filter = "(" + Constants.OBJECTCLASS + "=" + MBeanServer.class.getName() + ")";
+         sysContext.addServiceListener(new JMXServiceListener(this), filter);
+      }
+      catch (InvalidSyntaxException ex)
+      {
+         // ignore
+      }
    }
 
    public Object getRegisteredBean(String beanName)
@@ -161,4 +135,57 @@
          throw new IllegalStateException("Cannot install kernel bean: " + beanName, th);
       }
    }
+   
+   private void registerMBeans(MBeanServer server, MicrocontainerServiceMBean mbeanImpl)
+   {
+      try
+      {
+         installKernelBean(BEAN_MBEAN_SERVER, server);
+         StandardMBean mbean = new StandardMBean(mbeanImpl, MicrocontainerServiceMBean.class);
+         server.registerMBean(mbean, MBEAN_MICROCONTAINER_SERVICE);
+      }
+      catch (Exception ex)
+      {
+         throw new IllegalStateException("Cannot register MicrocontainerServiceMBean", ex);
+      }
+   }
+   
+   private void unregisterMBeans(MBeanServer server)
+   {
+      try
+      {
+         if (server.isRegistered(MBEAN_MICROCONTAINER_SERVICE))
+            server.unregisterMBean(MBEAN_MICROCONTAINER_SERVICE);
+      }
+      catch (Exception ex)
+      {
+         log.warn("Cannot unregister MicrocontainerServiceMBean", ex);
+      }
+   }
+   
+   class JMXServiceListener implements ServiceListener
+   {
+      private MicrocontainerServiceMBean mbean;
+      
+      public JMXServiceListener(MicrocontainerServiceMBean mbean)
+      {
+         this.mbean = mbean;
+      }
+
+      public void serviceChanged(ServiceEvent event)
+      {
+         ServiceReference sref = event.getServiceReference();
+         MBeanServer server = (MBeanServer)sysContext.getService(sref);
+         int type = event.getType();
+         switch(type)
+         {
+            case ServiceEvent.REGISTERED:
+               registerMBeans(server, mbean);
+               break;
+            case ServiceEvent.UNREGISTERING:
+               unregisterMBeans(server);
+               break;
+         }
+      }
+   }
 }
\ No newline at end of file



More information about the jboss-osgi-commits mailing list