You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2012/06/13 11:11:24 UTC

svn commit: r1349697 - in /karaf/branches/karaf-2.2.x: admin/management/src/main/resources/OSGI-INF/blueprint/ diagnostic/management/src/main/resources/OSGI-INF/blueprint/ features/management/src/main/java/org/apache/karaf/features/management/internal/...

Author: gnodet
Date: Wed Jun 13 09:11:23 2012
New Revision: 1349697

URL: http://svn.apache.org/viewvc?rev=1349697&view=rev
Log:
[KARAF-1538] Exceptions when unregistering jmx means during a restart

Modified:
    karaf/branches/karaf-2.2.x/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml
    karaf/branches/karaf-2.2.x/diagnostic/management/src/main/resources/OSGI-INF/blueprint/diagnostic-management.xml
    karaf/branches/karaf-2.2.x/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java
    karaf/branches/karaf-2.2.x/features/management/src/main/resources/OSGI-INF/blueprint/features-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/bundles/src/main/resources/OSGI-INF/blueprint/bundles-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/dev/src/main/resources/OSGI-INF/blueprint/dev-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/log/src/main/resources/OSGI-INF/blueprint/log-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/obr/src/main/resources/OSGI-INF/blueprint/obr-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/packages/src/main/resources/OSGI-INF/blueprint/packages-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/services/src/main/resources/OSGI-INF/blueprint/services-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/system/src/main/resources/OSGI-INF/blueprint/system-management.xml
    karaf/branches/karaf-2.2.x/management/mbeans/web/src/main/resources/OSGI-INF/blueprint/web-management.xml
    karaf/branches/karaf-2.2.x/management/server/src/main/java/org/apache/karaf/management/MBeanRegistrer.java

Modified: karaf/branches/karaf-2.2.x/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml (original)
+++ karaf/branches/karaf-2.2.x/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml Wed Jun 13 09:11:23 2012
@@ -29,7 +29,7 @@
         <property name="adminService" ref="adminService" />
     </bean>
 
-    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=admin,name=${karaf.name}"

Modified: karaf/branches/karaf-2.2.x/diagnostic/management/src/main/resources/OSGI-INF/blueprint/diagnostic-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/diagnostic/management/src/main/resources/OSGI-INF/blueprint/diagnostic-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/diagnostic/management/src/main/resources/OSGI-INF/blueprint/diagnostic-management.xml (original)
+++ karaf/branches/karaf-2.2.x/diagnostic/management/src/main/resources/OSGI-INF/blueprint/diagnostic-management.xml Wed Jun 13 09:11:23 2012
@@ -30,7 +30,7 @@
         <property name="providers" ref="providers" />
     </bean>
 
-    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=diagnostic,name=${karaf.name}"

Modified: karaf/branches/karaf-2.2.x/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java (original)
+++ karaf/branches/karaf-2.2.x/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java Wed Jun 13 09:11:23 2012
@@ -18,13 +18,11 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Hashtable;
 import java.util.List;
-
 import javax.management.MBeanNotificationInfo;
 import javax.management.MBeanRegistration;
 import javax.management.MBeanServer;
 import javax.management.NotCompliantMBeanException;
 import javax.management.Notification;
-import javax.management.NotificationBroadcasterSupport;
 import javax.management.ObjectName;
 import javax.management.openmbean.TabularData;
 
@@ -71,17 +69,32 @@ public class FeaturesServiceMBeanImpl ex
     }
 
     public void postRegister(Boolean registrationDone) {
-        registration = bundleContext.registerService(FeaturesListener.class.getName(),
-            getFeaturesListener(), new Hashtable());
+        registerService();
     }
 
-    public void preDeregister() throws Exception {
-        registration.unregister();
+    public void preDeregister() {
+        unregisterService();
     }
 
     public void postDeregister() {
     }
 
+    public void registerService() {
+        unregisterService();
+        registration = bundleContext.registerService(FeaturesListener.class.getName(),
+                getFeaturesListener(), new Hashtable());
+    }
+
+    public void unregisterService() {
+        if (registration != null) {
+            try {
+                registration.unregister();
+            } finally {
+                registration = null;
+            }
+        }
+    }
+
     /**
      * {@inheritDoc}
      */

Modified: karaf/branches/karaf-2.2.x/features/management/src/main/resources/OSGI-INF/blueprint/features-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/features/management/src/main/resources/OSGI-INF/blueprint/features-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/features/management/src/main/resources/OSGI-INF/blueprint/features-management.xml (original)
+++ karaf/branches/karaf-2.2.x/features/management/src/main/resources/OSGI-INF/blueprint/features-management.xml Wed Jun 13 09:11:23 2012
@@ -25,12 +25,12 @@
         <reference-listener ref="mbeanRegister" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer" />
     </reference>
 
-    <bean id="mbeanImpl" class="org.apache.karaf.features.management.internal.FeaturesServiceMBeanImpl">
+    <bean id="mbeanImpl" class="org.apache.karaf.features.management.internal.FeaturesServiceMBeanImpl" destroy-method="unregisterService">
         <property name="bundleContext" ref="blueprintBundleContext" />
         <property name="featuresService" ref="featuresService" />
     </bean>
 
-    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer" init-method="init"  destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=features,name=${karaf.name}"

Modified: karaf/branches/karaf-2.2.x/management/mbeans/bundles/src/main/resources/OSGI-INF/blueprint/bundles-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/bundles/src/main/resources/OSGI-INF/blueprint/bundles-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/bundles/src/main/resources/OSGI-INF/blueprint/bundles-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/bundles/src/main/resources/OSGI-INF/blueprint/bundles-management.xml Wed Jun 13 09:11:23 2012
@@ -25,7 +25,7 @@
     </bean>
 
     <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=bundles,name=${karaf.name}" key-ref="bundlesMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml Wed Jun 13 09:11:23 2012
@@ -34,7 +34,7 @@
     <reference-list id="artifactInstallers" interface="org.apache.felix.fileinstall.ArtifactInstaller" availability="optional" />
 
     <!-- Register MBean in the MBeanServer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=config,name=${karaf.name}" key-ref="configMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/mbeans/dev/src/main/resources/OSGI-INF/blueprint/dev-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/dev/src/main/resources/OSGI-INF/blueprint/dev-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/dev/src/main/resources/OSGI-INF/blueprint/dev-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/dev/src/main/resources/OSGI-INF/blueprint/dev-management.xml Wed Jun 13 09:11:23 2012
@@ -25,7 +25,7 @@
     </bean>
 
     <!-- Register Dev MBean in the MBean Server -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=dev,name=${karaf.name}" key-ref="devMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/mbeans/log/src/main/resources/OSGI-INF/blueprint/log-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/log/src/main/resources/OSGI-INF/blueprint/log-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/log/src/main/resources/OSGI-INF/blueprint/log-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/log/src/main/resources/OSGI-INF/blueprint/log-management.xml Wed Jun 13 09:11:23 2012
@@ -25,7 +25,7 @@
     </bean>
 
     <!-- Register MBean in the MBean Server -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=log,name=${karaf.name}" key-ref="logMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/mbeans/obr/src/main/resources/OSGI-INF/blueprint/obr-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/obr/src/main/resources/OSGI-INF/blueprint/obr-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/obr/src/main/resources/OSGI-INF/blueprint/obr-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/obr/src/main/resources/OSGI-INF/blueprint/obr-management.xml Wed Jun 13 09:11:23 2012
@@ -26,7 +26,7 @@
     </bean>
 
     <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=obr,name=${karaf.name}" key-ref="obrMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/mbeans/packages/src/main/resources/OSGI-INF/blueprint/packages-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/packages/src/main/resources/OSGI-INF/blueprint/packages-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/packages/src/main/resources/OSGI-INF/blueprint/packages-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/packages/src/main/resources/OSGI-INF/blueprint/packages-management.xml Wed Jun 13 09:11:23 2012
@@ -25,7 +25,7 @@
     </bean>
 
     <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=packages,name=${karaf.name}" key-ref="packagesMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/mbeans/services/src/main/resources/OSGI-INF/blueprint/services-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/services/src/main/resources/OSGI-INF/blueprint/services-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/services/src/main/resources/OSGI-INF/blueprint/services-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/services/src/main/resources/OSGI-INF/blueprint/services-management.xml Wed Jun 13 09:11:23 2012
@@ -25,7 +25,7 @@
     </bean>
 
     <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=services,name=${karaf.name}" key-ref="servicesMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/mbeans/system/src/main/resources/OSGI-INF/blueprint/system-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/system/src/main/resources/OSGI-INF/blueprint/system-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/system/src/main/resources/OSGI-INF/blueprint/system-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/system/src/main/resources/OSGI-INF/blueprint/system-management.xml Wed Jun 13 09:11:23 2012
@@ -25,7 +25,7 @@
     </bean>
 
     <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=system,name=${karaf.name}" key-ref="systemMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/mbeans/web/src/main/resources/OSGI-INF/blueprint/web-management.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/mbeans/web/src/main/resources/OSGI-INF/blueprint/web-management.xml?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/mbeans/web/src/main/resources/OSGI-INF/blueprint/web-management.xml (original)
+++ karaf/branches/karaf-2.2.x/management/mbeans/web/src/main/resources/OSGI-INF/blueprint/web-management.xml Wed Jun 13 09:11:23 2012
@@ -25,7 +25,7 @@
     </bean>
 
     <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer">
+    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
         <property name="mbeans">
             <map>
                 <entry value="org.apache.karaf:type=web,name=${karaf.name}" key-ref="webMBean"/>

Modified: karaf/branches/karaf-2.2.x/management/server/src/main/java/org/apache/karaf/management/MBeanRegistrer.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/management/server/src/main/java/org/apache/karaf/management/MBeanRegistrer.java?rev=1349697&r1=1349696&r2=1349697&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/management/server/src/main/java/org/apache/karaf/management/MBeanRegistrer.java (original)
+++ karaf/branches/karaf-2.2.x/management/server/src/main/java/org/apache/karaf/management/MBeanRegistrer.java Wed Jun 13 09:11:23 2012
@@ -16,8 +16,9 @@
  */
 package org.apache.karaf.management;
 
+import java.util.HashSet;
 import java.util.Map;
-
+import java.util.Set;
 import javax.management.JMException;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
@@ -27,6 +28,7 @@ public class MBeanRegistrer {
     private MBeanServer mbeanServer;
 
     private Map<Object, String> mbeans;
+    private Set<String> registered = new HashSet<String>();
 
     public void setMbeans(Map<Object, String> mbeans) {
         this.mbeans = mbeans;
@@ -49,20 +51,26 @@ public class MBeanRegistrer {
         registerMBeans();
     }
 
+    public void destroy() throws Exception {
+        unregisterMBeans();
+    }
+
     protected void registerMBeans() throws JMException {
         if (mbeanServer != null && mbeans != null) {
             for (Map.Entry<Object, String> entry : mbeans.entrySet()) {
                 String value = parseProperty(entry.getValue());
                 mbeanServer.registerMBean(entry.getKey(), new ObjectName(value));
+                registered.add(value);
             }
         }
     }
 
     protected void unregisterMBeans() throws JMException {
         if (mbeanServer != null && mbeans != null) {
-            for (Map.Entry<Object, String> entry : mbeans.entrySet()) {
-                String value = parseProperty(entry.getValue());
-                mbeanServer.unregisterMBean(new ObjectName(value));
+            while (!registered.isEmpty()) {
+                String name = registered.iterator().next();
+                mbeanServer.unregisterMBean(new ObjectName(name));
+                registered.remove(name);
             }
         }
     }