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) {