You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2004/11/03 04:25:51 UTC

svn commit: rev 56462 - geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx

Author: dain
Date: Tue Nov  2 19:25:49 2004
New Revision: 56462

Modified:
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/AbstractManagedObject.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanMBean.java
Log:
Added gbeanEnabled flag to enable/disable gbeans
A disabled gbean can not be started, and will not be started from startRecursive


Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/AbstractManagedObject.java
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/AbstractManagedObject.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/AbstractManagedObject.java	Tue Nov  2 19:25:49 2004
@@ -94,6 +94,11 @@
      */
     private ObjectName blocker;
 
+    /**
+     * Is this gbean enabled?  A disabled gbean can not be started.
+     */
+    private boolean enabled = true;
+
     // This must be volatile otherwise getState must be synchronized which will result in deadlock as dependent
     // objects check if each other are in one state or another (i.e., classic A calls B while B calls A)
     private volatile State state = State.STOPPED;
@@ -184,6 +189,24 @@
         return objectName;
     }
 
+    /**
+     * Is this gbean enabled.  A disabled gbean can not be started.
+     *
+     * @return true if the gbean is enabled and can be started
+     */
+    public synchronized final boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * Changes the enabled status.
+     *
+     * @param enabled the new enabled flag
+     */
+    public synchronized final void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
     public DependencyManager getDependencyManager() {
         return dependencyManager;
     }
@@ -272,6 +295,9 @@
             if (state == State.STARTING || state == State.RUNNING) {
                 return;
             }
+            if (!enabled) {
+                throw new IllegalStateException("A disabled GBean can not be started: objectName=" + objectName);
+            }
             setStateInstance(State.STARTING);
         }
         sendNotification(State.STARTING.getEventTypeValue());
@@ -306,13 +332,21 @@
         Set dependents = dependencyManager.getChildren(objectName);
         for (Iterator iterator = dependents.iterator(); iterator.hasNext();) {
             ObjectName dependent = (ObjectName) iterator.next();
+            boolean enabled = true;
             try {
-                server.invoke(dependent, "startRecursive", null, null);
-            } catch (ReflectionException e) {
-                if (e.getTargetException() instanceof NoSuchMethodException) {
-                    // did not have a startRecursive method - ok
-                } else {
-                    throw e;
+                enabled = ((Boolean) server.getAttribute(dependent, "gbeanEnabled")).booleanValue();
+            } catch (AttributeNotFoundException e) {
+                // this is ok didn't have the attribute....
+            }
+            if (enabled) {
+                try {
+                    server.invoke(dependent, "startRecursive", null, null);
+                } catch (ReflectionException e) {
+                    if (e.getTargetException() instanceof NoSuchMethodException) {
+                        // did not have a startRecursive method - ok
+                    } else {
+                        throw e;
+                    }
                 }
             }
         }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanMBean.java
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanMBean.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanMBean.java	Tue Nov  2 19:25:49 2004
@@ -154,7 +154,7 @@
     private final Class type;
 
     /**
-     * Is this gbean off line?
+     * Is this gbean offline?
      */
     private boolean offline = true;
 
@@ -933,6 +933,23 @@
                         "kernel",
                         Kernel.class,
                         null));
+
+        attributesMap.put("gbeanEnabled",
+                new GBeanMBeanAttribute(this,
+                        "gbeanEnabled",
+                        Boolean.TYPE,
+                        new MethodInvoker() {
+                            public Object invoke(Object target, Object[] arguments) throws Exception {
+                                return new Boolean(isEnabled());
+                            }
+                        },
+                        new MethodInvoker() {
+                            public Object invoke(Object target, Object[] arguments) throws Exception {
+                                Boolean enabled = (Boolean) arguments[0];
+                                setEnabled(enabled.booleanValue());
+                                return null;
+                            }
+                        }));
 
         //
         // Normal attributes