You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2010/09/29 11:56:27 UTC
svn commit: r1002546 - in /sling/whiteboard/fmeschbe/jmx-whiteboard: pom.xml
src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/Activator.java
src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/JmxWhiteboardSupport.java
Author: fmeschbe
Date: Wed Sep 29 09:56:27 2010
New Revision: 1002546
URL: http://svn.apache.org/viewvc?rev=1002546&view=rev
Log:
Fix pom.xml for proper bundling and refactor DS Component into a straight class managed by the BundleActivator and using ServiceTracker to track MBeanServer and DynamicMBean services
Added:
sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/Activator.java (with props)
Modified:
sling/whiteboard/fmeschbe/jmx-whiteboard/pom.xml
sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/JmxWhiteboardSupport.java
Modified: sling/whiteboard/fmeschbe/jmx-whiteboard/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/jmx-whiteboard/pom.xml?rev=1002546&r1=1002545&r2=1002546&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/jmx-whiteboard/pom.xml (original)
+++ sling/whiteboard/fmeschbe/jmx-whiteboard/pom.xml Wed Sep 29 09:56:27 2010
@@ -52,18 +52,15 @@
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
- <Bundle-Category>sling</Bundle-Category>
- <!-- No Export-Package -->
+ <Bundle-Category>aries</Bundle-Category>
+ <Bundle-Activator>org.apache.sling.whiteboard.fmeschbe.jmx.whiteboard.Activator</Bundle-Activator>
+ <Export-Package>!*</Export-Package>
<Private-Package>
- org.apache.sling.extensions.cachecontrol.impl.*,
+ org.apache.sling.whiteboard.fmeschbe.jmx.whiteboard
</Private-Package>
</instructions>
</configuration>
Added: sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/Activator.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/Activator.java?rev=1002546&view=auto
==============================================================================
--- sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/Activator.java (added)
+++ sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/Activator.java Wed Sep 29 09:56:27 2010
@@ -0,0 +1,97 @@
+/*
+ * Copyright 1997-2010 Day Management AG
+ * Barfuesserplatz 6, 4001 Basel, Switzerland
+ * All Rights Reserved.
+ *
+ * This software is the confidential and proprietary information of
+ * Day Management AG, ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Day.
+ */
+package org.apache.sling.whiteboard.fmeschbe.jmx.whiteboard;
+
+import javax.management.DynamicMBean;
+import javax.management.MBeanServer;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator implements BundleActivator {
+
+ private JmxWhiteboardSupport jmxWhiteBoard;
+
+ private ServiceTracker mbeanServerTracker;
+
+ private ServiceTracker mbeanTracker;
+
+ public void start(BundleContext context) throws Exception {
+ jmxWhiteBoard = new JmxWhiteboardSupport();
+
+ mbeanServerTracker = new MBeanServerTracker(context);
+ mbeanServerTracker.open();
+
+ mbeanTracker = new MBeanTracker(context);
+ mbeanTracker.open();
+ }
+
+ public void stop(BundleContext context) throws Exception {
+ if (mbeanTracker != null) {
+ mbeanTracker.close();
+ mbeanTracker = null;
+ }
+
+ if (mbeanServerTracker != null) {
+ mbeanServerTracker.close();
+ mbeanServerTracker = null;
+ }
+
+ jmxWhiteBoard = null;
+ }
+
+ private class MBeanServerTracker extends ServiceTracker {
+
+ public MBeanServerTracker(BundleContext context) {
+ super(context, MBeanServer.class.getName(), null);
+ }
+
+ @Override
+ public Object addingService(ServiceReference reference) {
+ MBeanServer mbeanServer = (MBeanServer) super.addingService(reference);
+ jmxWhiteBoard.addMBeanServer(mbeanServer);
+ return mbeanServer;
+ }
+
+ @Override
+ public void removedService(ServiceReference reference, Object service) {
+ if (service instanceof MBeanServer) {
+ jmxWhiteBoard.removeMBeanServer((MBeanServer) service);
+ }
+ super.removedService(reference, service);
+ }
+ }
+
+ private class MBeanTracker extends ServiceTracker {
+
+ public MBeanTracker(BundleContext context) {
+ super(context, DynamicMBean.class.getName(), null);
+ }
+
+ @Override
+ public Object addingService(ServiceReference reference) {
+ DynamicMBean mbean = (DynamicMBean) super.addingService(reference);
+ jmxWhiteBoard.registerMBean(mbean, reference);
+ return mbean;
+ }
+
+ @Override
+ public void removedService(ServiceReference reference, Object service) {
+ if (service instanceof DynamicMBean) {
+ jmxWhiteBoard.unregisterMBean((DynamicMBean) service);
+ }
+ super.removedService(reference, service);
+ }
+ }
+}
Propchange: sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/Activator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/Activator.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev Url
Modified: sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/JmxWhiteboardSupport.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/JmxWhiteboardSupport.java?rev=1002546&r1=1002545&r2=1002546&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/JmxWhiteboardSupport.java (original)
+++ sling/whiteboard/fmeschbe/jmx-whiteboard/src/main/java/org/apache/sling/whiteboard/fmeschbe/jmx/whiteboard/JmxWhiteboardSupport.java Wed Sep 29 09:56:27 2010
@@ -36,25 +36,19 @@ import javax.management.NotCompliantMBea
import javax.management.ObjectInstance;
import javax.management.ObjectName;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Component(metatype = false)
-public class JmxWhiteboardSupport {
+class JmxWhiteboardSupport {
private static final String PROP_OBJECT_NAME = "jmx.objectname";
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
- @Reference(referenceInterface = MBeanServer.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC, bind = "addMBeanServer", unbind = "removeMBeanServer")
private MBeanServer[] mbeanServers = new MBeanServer[0];
- @Reference(referenceInterface = DynamicMBean.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC, bind = "registerMBean", unbind = "unregisterMBean")
private final Map<DynamicMBean, Map<MBeanServer, ObjectName>> mbeans = new IdentityHashMap<DynamicMBean, Map<MBeanServer, ObjectName>>();
protected void addMBeanServer(final MBeanServer mbeanServer) {
@@ -86,7 +80,8 @@ public class JmxWhiteboardSupport {
mbeanServers = serverList.toArray(new MBeanServer[serverList.size()]);
}
- protected void registerMBean(DynamicMBean mbean, Map<String, Object> props) {
+ protected void registerMBean(DynamicMBean mbean,
+ final ServiceReference props) {
ObjectName objectName = getObjectName(props);
if (objectName != null || mbean instanceof MBeanRegistration) {
Map<MBeanServer, ObjectName> registration = new HashMap<MBeanServer, ObjectName>();
@@ -128,8 +123,8 @@ public class JmxWhiteboardSupport {
registration.clear();
}
- private ObjectName getObjectName(final Map<String, Object> props) {
- Object oName = props.get(PROP_OBJECT_NAME);
+ private ObjectName getObjectName(final ServiceReference props) {
+ Object oName = props.getProperty(PROP_OBJECT_NAME);
if (oName instanceof ObjectName) {
return (ObjectName) oName;
} else if (oName instanceof String) {