[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