You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by at...@apache.org on 2009/12/03 10:04:24 UTC

svn commit: r886713 - in /incubator/aries/trunk/jmx: jmx-bundle/pom.xml jmx-core/pom.xml jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java jmx-core/src/main/java/org/apache/aries/jmx/framework/RegistrableStandardEmitterMBean.java pom.xml

Author: atk
Date: Thu Dec  3 09:04:24 2009
New Revision: 886713

URL: http://svn.apache.org/viewvc?rev=886713&view=rev
Log:
ARIES-31 ARIES-35 Implement BundleState and ServiceState MBeans

Added:
    incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/RegistrableStandardEmitterMBean.java   (with props)
Removed:
    incubator/aries/trunk/jmx/jmx-core/pom.xml
Modified:
    incubator/aries/trunk/jmx/jmx-bundle/pom.xml
    incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java
    incubator/aries/trunk/jmx/pom.xml

Modified: incubator/aries/trunk/jmx/jmx-bundle/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-bundle/pom.xml?rev=886713&r1=886712&r2=886713&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-bundle/pom.xml (original)
+++ incubator/aries/trunk/jmx/jmx-bundle/pom.xml Thu Dec  3 09:04:24 2009
@@ -63,17 +63,17 @@
                         <Import-Package>
 							!org.apache.aries.jmx*,
 							org.osgi.framework;version="1.5.0",
-							org.osgi.service.cm;version="1.3.0",
-							org.osgi.service.permissionadmin;version="1.2.0",
-							org.osgi.service.provisioning;version="1.2.0",
-							org.osgi.service.useradmin;version="1.1.0",
-							org.osgi.jmx;version="1.0.0",
-							org.osgi.jmx.framework;version="1.5.0",
-							org.osgi.jmx.service.cm;version="1.3.0",
-							org.osgi.jmx.service.permissionadmin;version="1.2.0",
-							org.osgi.jmx.service.provisioning;version="1.2.0",
-							org.osgi.jmx.service.useradmin;version="1.1.0",
-							org.osgi.util.tracker,*
+							org.osgi.service.packageadmin;version="1.2.0",
+							org.osgi.service.startlevel;version="1.1.0",
+							org.osgi.service.cm;version="1.3.0";resolution:="optional",
+							org.osgi.service.permissionadmin;version="1.2.0";resolution:="optional",
+							org.osgi.service.provisioning;version="1.2.0";resolution:="optional",
+							org.osgi.service.useradmin;version="1.1.0";resolution:="optional",
+							org.osgi.util.tracker,
+							org.osgi.service.log,
+							javax.management,
+							javax.management.openmbean,
+							*
                         </Import-Package>
 						<Bundle-Activator>org.apache.aries.jmx.Activator</Bundle-Activator>
 						<!-- Not currently exporting from the standalone -->

Modified: incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java?rev=886713&r1=886712&r2=886713&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java (original)
+++ incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/agent/JMXAgentImpl.java Thu Dec  3 09:04:24 2009
@@ -33,7 +33,9 @@
 import org.apache.aries.jmx.Logger;
 import org.apache.aries.jmx.MBeanHandler;
 import org.apache.aries.jmx.MBeanServiceTracker;
+import org.apache.aries.jmx.framework.BundleStateMBeanHandler;
 import org.apache.aries.jmx.framework.FrameworkMBeanHandler;
+import org.apache.aries.jmx.framework.ServiceStateMBeanHandler;
 import org.apache.aries.jmx.framework.PackageStateMBeanHandler;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.log.LogService;
@@ -83,6 +85,12 @@
         MBeanHandler frameworkHandler = new FrameworkMBeanHandler(bc, logger);
         frameworkHandler.open();
         mbeansHandlers.add(frameworkHandler);
+        MBeanHandler bundleStateHandler = new BundleStateMBeanHandler(bc, logger);
+        bundleStateHandler.open();
+        mbeansHandlers.add(bundleStateHandler);
+        MBeanHandler serviceStateHandler = new ServiceStateMBeanHandler(bc, logger);
+        serviceStateHandler.open();
+        mbeansHandlers.add(serviceStateHandler);
         MBeanHandler packageStateHandler = new PackageStateMBeanHandler(bc, logger);
         packageStateHandler.open();
         mbeansHandlers.add(packageStateHandler);

Added: incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/RegistrableStandardEmitterMBean.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/RegistrableStandardEmitterMBean.java?rev=886713&view=auto
==============================================================================
--- incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/RegistrableStandardEmitterMBean.java (added)
+++ incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/RegistrableStandardEmitterMBean.java Thu Dec  3 09:04:24 2009
@@ -0,0 +1,153 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.aries.jmx.framework;
+
+import javax.management.ListenerNotFoundException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanNotificationInfo;
+import javax.management.MBeanRegistration;
+import javax.management.MBeanServer;
+import javax.management.NotCompliantMBeanException;
+import javax.management.NotificationEmitter;
+import javax.management.NotificationFilter;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+
+/**
+ * The <code>StandardMBean</code> does not appear to delegate correctly to the underlying MBean implementation. Due to
+ * issues surrounding the <code>MBeanRegistration</code> callback methods and <code>NotificationEmmitter</code> methods,
+ * this subclass was introduced to force the delegation
+ * 
+ * @version $Rev$ $Date$
+ */
+public class RegistrableStandardEmitterMBean extends StandardMBean implements MBeanRegistration, NotificationEmitter {
+
+    public <T> RegistrableStandardEmitterMBean(T impl, Class<T> intf) throws NotCompliantMBeanException {
+        super(impl, intf);
+    }
+
+    /**
+     * @see javax.management.StandardMBean#getMBeanInfo()
+     */
+    public MBeanInfo getMBeanInfo() {
+        MBeanInfo mbeanInfo = super.getMBeanInfo();
+        if (mbeanInfo != null) {
+            MBeanNotificationInfo[] notificationInfo;
+            Object impl = getImplementation();
+            if (impl instanceof NotificationEmitter) {
+                notificationInfo = ((NotificationEmitter) (impl)).getNotificationInfo();
+            } else {
+                notificationInfo = new MBeanNotificationInfo[0];
+            }
+            mbeanInfo = new MBeanInfo(mbeanInfo.getClassName(), mbeanInfo.getDescription(), mbeanInfo.getAttributes(),
+                    mbeanInfo.getConstructors(), mbeanInfo.getOperations(), notificationInfo);
+        }
+        return mbeanInfo;
+    }
+
+    /**
+     * @see javax.management.MBeanRegistration#postDeregister()
+     */
+    public void postDeregister() {
+        Object impl = getImplementation();
+        if (impl instanceof MBeanRegistration) {
+            ((MBeanRegistration) impl).postDeregister();
+        }
+    }
+
+    /**
+     * @see javax.management.MBeanRegistration#postRegister(java.lang.Boolean)
+     */
+    public void postRegister(Boolean registrationDone) {
+        Object impl = getImplementation();
+        if (impl instanceof MBeanRegistration) {
+            ((MBeanRegistration) impl).postRegister(registrationDone);
+        }
+    }
+
+    /**
+     * @see javax.management.MBeanRegistration#preDeregister()
+     */
+    public void preDeregister() throws Exception {
+        Object impl = getImplementation();
+        if (impl instanceof MBeanRegistration) {
+            ((MBeanRegistration) impl).preDeregister();
+        }
+    }
+
+    /**
+     * @see javax.management.MBeanRegistration#preRegister(javax.management.MBeanServer, javax.management.ObjectName)
+     */
+    public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception {
+        ObjectName result = name;
+        Object impl = getImplementation();
+        if (impl instanceof MBeanRegistration) {
+            result = ((MBeanRegistration) impl).preRegister(server, name);
+        }
+        return result;
+    }
+
+    /**
+     * @see javax.management.NotificationEmitter#removeNotificationListener(javax.management.NotificationListener,
+     *      javax.management.NotificationFilter, java.lang.Object)
+     */
+    public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
+            throws ListenerNotFoundException {
+        Object impl = getImplementation();
+        if (impl instanceof NotificationEmitter) {
+            ((NotificationEmitter) (impl)).removeNotificationListener(listener, filter, handback);
+        }
+    }
+
+    /**
+     * @see javax.management.NotificationBroadcaster#addNotificationListener(javax.management.NotificationListener,
+     *      javax.management.NotificationFilter, java.lang.Object)
+     */
+    public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
+            throws IllegalArgumentException {
+        Object impl = getImplementation();
+        if (impl instanceof NotificationEmitter) {
+            ((NotificationEmitter) (impl)).addNotificationListener(listener, filter, handback);
+        }
+    }
+
+    /**
+     * @see javax.management.NotificationBroadcaster#getNotificationInfo()
+     */
+    public MBeanNotificationInfo[] getNotificationInfo() {
+        MBeanNotificationInfo[] result;
+        Object impl = getImplementation();
+        if (impl instanceof NotificationEmitter) {
+            result = ((NotificationEmitter) (impl)).getNotificationInfo();
+        } else {
+            result = new MBeanNotificationInfo[0];
+        }
+        return result;
+    }
+
+    /**
+     * @see javax.management.NotificationBroadcaster#removeNotificationListener(javax.management.NotificationListener)
+     */
+    public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException {
+        Object impl = getImplementation();
+        if (impl instanceof NotificationEmitter) {
+            ((NotificationEmitter) (impl)).removeNotificationListener(listener);
+        }
+    }
+
+}

Propchange: incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/RegistrableStandardEmitterMBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/framework/RegistrableStandardEmitterMBean.java
------------------------------------------------------------------------------
    svn:keywords = Revision Date

Modified: incubator/aries/trunk/jmx/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/pom.xml?rev=886713&r1=886712&r2=886713&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/pom.xml (original)
+++ incubator/aries/trunk/jmx/pom.xml Thu Dec  3 09:04:24 2009
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
@@ -15,8 +16,7 @@
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
     <parent>
         <groupId>org.apache.aries</groupId>
@@ -71,6 +71,36 @@
                 <artifactId>junit</artifactId>
                 <version>4.5</version>
             </dependency>
+			<dependency>
+                <groupId>org.ops4j.pax.exam</groupId>
+                <artifactId>pax-exam</artifactId>
+                <version>1.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>org.ops4j.pax.exam</groupId>
+                <artifactId>pax-exam-junit</artifactId>
+                <version>1.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>org.ops4j.pax.exam</groupId>
+                <artifactId>pax-exam-container-default</artifactId>
+                <version>1.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>org.ops4j.pax.logging</groupId>
+                <artifactId>pax-logging-api</artifactId>
+                <version>1.4</version>
+            </dependency>
+            <dependency>
+                <groupId>org.ops4j.pax.logging</groupId>
+                <artifactId>pax-logging-service</artifactId>
+                <version>1.4</version>
+            </dependency>
+            <dependency>
+                <groupId>org.ops4j.pax.url</groupId>
+                <artifactId>pax-url-mvn</artifactId>
+                <version>1.0.0</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
     
@@ -107,6 +137,7 @@
         <module>jmx-api</module>
         <module>jmx-core</module>
         <module>jmx-bundle</module>
-    </modules>
+		<module>jmx-itests</module>
+  </modules>
 
-</project>
+</project>
\ No newline at end of file