[jboss-cvs] JBossAS SVN: r88926 - in branches/Branch_5_x: testsuite/src/main/org/jboss/test/profileservice/test and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri May 15 02:56:49 EDT 2009


Author: jason.greene at jboss.com
Date: 2009-05-15 02:56:48 -0400 (Fri, 15 May 2009)
New Revision: 88926

Modified:
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/MBeanRuntimeComponentDispatcher.java
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
   branches/Branch_5_x/testsuite/src/main/org/jboss/test/profileservice/test/JMXMappingUnitTestCase.java
Log:
Use inner classes to mock annotations instead of proxy generation
Add run state support to mbean components


Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/MBeanRuntimeComponentDispatcher.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/MBeanRuntimeComponentDispatcher.java	2009-05-15 06:46:10 UTC (rev 88925)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/MBeanRuntimeComponentDispatcher.java	2009-05-15 06:56:48 UTC (rev 88926)
@@ -70,6 +70,14 @@
    public MetaValue get(Object componentName, String propertyName)
    {
       ManagedProperty prop = AbstractRuntimeComponentDispatcher.getActiveProperty();
+      
+      if(propertyName.equals("state") && prop.getMetaType().equals(ControllerStateMetaType.TYPE))
+      {
+         String stateString = getState(componentName);
+         EnumValueSupport state = new EnumValueSupport(ControllerStateMetaType.TYPE, stateString);
+         return state;
+      }
+      
       try
       {
          Object value = mbeanServer.getAttribute(new ObjectName(componentName.toString()), propertyName);
@@ -93,16 +101,7 @@
       }
       catch (Throwable t)
       {
-         if(propertyName.equals("state") && prop.getMetaType().equals(ControllerStateMetaType.TYPE))
-         {
-            String stateString = getState(componentName);
-            EnumValueSupport state = new EnumValueSupport(ControllerStateMetaType.TYPE, stateString);
-            return state;
-         }
-         else
-         {
-            throw new UndeclaredThrowableException(t, "Failed to get property '" + propertyName + "' on component '" + componentName + "'.");
-         }
+         throw new UndeclaredThrowableException(t, "Failed to get property '" + propertyName + "' on component '" + componentName + "'.");
       }
    }
 
@@ -190,7 +189,17 @@
 
    public String getState(Object name)
    {
-      return ControllerState.INSTALLED.getStateString();
+      try
+      {
+         if (mbeanServer.isRegistered(new ObjectName(name.toString())))
+            return ControllerState.INSTALLED.getStateString();
+      }
+      catch (Exception e)
+      {
+         // Failure = Not installed
+      }
+      
+      return ControllerState.NOT_INSTALLED.getStateString();
    }
 
    public <T extends Enum<?>> T mapControllerState(Object name, ContextStateMapper<T> mapper)

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java	2009-05-15 06:46:10 UTC (rev 88925)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java	2009-05-15 06:56:48 UTC (rev 88926)
@@ -22,6 +22,7 @@
 package org.jboss.profileservice.management;
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.lang.annotation.Annotation;
 import java.lang.management.ManagementFactory;
 import java.text.MessageFormat;
@@ -42,7 +43,6 @@
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
-import org.jboss.annotation.factory.AnnotationCreator;
 import org.jboss.deployers.client.spi.main.MainDeployer;
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.spi.management.DeploymentTemplate;
@@ -68,7 +68,9 @@
 import org.jboss.managed.api.annotation.ManagementObject;
 import org.jboss.managed.api.annotation.ManagementObjectID;
 import org.jboss.managed.api.annotation.ManagementObjectRef;
+import org.jboss.managed.api.annotation.ManagementOperation;
 import org.jboss.managed.api.annotation.ManagementProperties;
+import org.jboss.managed.api.annotation.ManagementProperty;
 import org.jboss.managed.api.annotation.ViewUse;
 import org.jboss.managed.api.factory.ManagedObjectFactory;
 import org.jboss.managed.plugins.ManagedComponentImpl;
@@ -110,6 +112,8 @@
       properties = ManagementProperties.EXPLICIT, description = "The ProfileService ManagementView")
 public class ManagementViewImpl extends AbstractTemplateCreator implements ManagementView
 {
+  
+
    /** The logger. */
    private static Logger log = Logger.getLogger(ManagementViewImpl.class);
    private static final String BUNDLE_NAME = "org.jboss.profileservice.management.messages"; //$NON-NLS-1$
@@ -265,20 +269,15 @@
                   try
                   {
                      ManagedObject mo = createManagedObject(comp.getName(), mdf.getDefaultViewUse());
-                     // Add a ManagementComponent annotation
-                     String annotationExpr = "@org.jboss.managed.api.annotation.ManagementObject("
-                        + "name=\""+comp.getName()+"\","
-                        + "componentType=@org.jboss.managed.api.annotation.ManagementComponent(type=\""
-                        + comp.getType()+"\",subtype=\""+comp.getSubtype()+"\"),"
-                        + "isRuntime=true"
-                        + ")";
-                     ManagementObject moAnn = (ManagementObject) AnnotationCreator.createAnnotation(
-                           annotationExpr, ManagementObject.class);
+                     
+                     String name = comp.getName().getCanonicalName();
+                     ManagementObject moAnn = createMOAnnotation(name, comp.getType(), comp.getSubtype());
+                     
                      // Both the ManagementObject and ManagementComponent annotation need to be in the MO annotations
                      mo.getAnnotations().put(ManagementObject.class.getName(), moAnn);
                      ManagementComponent mcAnn = moAnn.componentType();
                      mo.getAnnotations().put(ManagementComponent.class.getName(), mcAnn);
-                     unitMOs.put(comp.getName().getCanonicalName(), mo);
+                     unitMOs.put(name, mo);
                   }
                   catch(Exception e)
                   {
@@ -357,6 +356,104 @@
       return true;
    }
 
+   @SuppressWarnings("all")
+   private static final class ManagementObjectAnnotationImpl implements ManagementObject, Serializable
+   { 
+      private static final long serialVersionUID=5355799336353299850L;
+      
+      private final String name;
+      private final String type;
+      private final String subtype;
+      
+      @SuppressWarnings("all")
+      private final class ManagementComponentAnnotationImpl implements ManagementComponent, Serializable
+      {
+         private static final long serialVersionUID=5355799336353299850L;
+         
+         public String subtype()
+         {
+            return subtype;
+         }
+
+         public String type()
+         {
+            return type;
+         }
+
+         public Class<? extends Annotation> annotationType()
+         {
+            return ManagementComponent.class;
+         }
+      }
+
+      private ManagementObjectAnnotationImpl(String name, String type, String subtype)
+      {
+         this.name=name;
+         this.type=type;
+         this.subtype=subtype;
+      }
+
+      public String attachmentName()
+      {
+         return "";
+      }
+
+      public ManagementProperty[] classProperties()
+      {
+         return new ManagementProperty[0];
+      }
+
+      public ManagementComponent componentType()
+      {
+         return new ManagementComponentAnnotationImpl();
+      }
+
+      public String description()
+      {
+         return "";
+      }
+
+      public boolean isRuntime()
+      {
+         return true;
+      }
+
+      public String name()
+      {
+         return name;
+      }
+
+      public ManagementOperation[] operations()
+      {
+         return new ManagementOperation[0];
+      }
+
+      public ManagementProperties properties()
+      {
+         return ManagementProperties.ALL;
+      }
+
+      public Class<?> targetInterface()
+      {
+         return Object.class;
+      }
+
+      public String type()
+      {
+         return "";
+      }
+
+      public Class<? extends Annotation> annotationType()
+      {
+         return ManagementObject.class;
+      }
+   }
+   
+   private ManagementObject createMOAnnotation(final String name, final String type, final String subtype)
+   {
+      return new ManagementObjectAnnotationImpl(name, type, subtype);
+   }
+
    public void reload()
    {
       forceReload = true;
@@ -659,7 +756,7 @@
             compByCompType.put(type, typeComps);
          }
          typeComps.add(comp);
-         RunState state = updateRunState(null, comp);
+         RunState state = updateRunState(mo, comp);
       }
 
       // Scan for @ManagementObjectRef
@@ -779,7 +876,7 @@
             name = runtimeMO.getComponentName();
          if (name != null)
          {
-            state = getMappedState(name, runStateMapper);
+            state = getComponentMappedState(comp, runtimeMO, name, runStateMapper);
             if (comp instanceof MutableManagedComponent)
             {
                MutableManagedComponent mcomp = MutableManagedComponent.class.cast(comp);
@@ -822,6 +919,35 @@
       }
       return state;
    }
+   
+   protected <T extends Enum<?>> T getComponentMappedState(ManagedComponent comp, ManagedObject mo, Object name, ContextStateMapper<T> mapper)
+   {
+      T state = mapper.getErrorState();
+      try
+      {
+         RuntimeComponentDispatcher dispatcher;
+         if (mo != null && mo.getTransientAttachment(MBeanRuntimeComponentDispatcher.class.getName()) != null)
+         {
+            dispatcher = mbeanProxyFactory.getDispatcher();
+         }
+         else
+         {
+            dispatcher = this.dispatcher;
+         }
+         
+         if (dispatcher != null)
+         {
+            // TODO, update RuntimeComponentDispatcher
+            AbstractRuntimeComponentDispatcher xdispatcher=(AbstractRuntimeComponentDispatcher) dispatcher;
+            state=xdispatcher.mapControllerState(name, mapper);
+         }
+      }
+      catch(Exception e)
+      {
+         log.debug("Failed to get controller state", e);
+      }
+      return state;
+   }
 
    /**
     * Process generic value.

Modified: branches/Branch_5_x/testsuite/src/main/org/jboss/test/profileservice/test/JMXMappingUnitTestCase.java
===================================================================
--- branches/Branch_5_x/testsuite/src/main/org/jboss/test/profileservice/test/JMXMappingUnitTestCase.java	2009-05-15 06:46:10 UTC (rev 88925)
+++ branches/Branch_5_x/testsuite/src/main/org/jboss/test/profileservice/test/JMXMappingUnitTestCase.java	2009-05-15 06:56:48 UTC (rev 88926)
@@ -27,6 +27,7 @@
 import org.jboss.deployers.spi.management.ManagementView;
 import org.jboss.managed.api.ComponentType;
 import org.jboss.managed.api.ManagedComponent;
+import org.jboss.managed.api.RunState;
 import org.jboss.metatype.api.values.SimpleValue;
 
 /**
@@ -154,4 +155,21 @@
 
       fail("Could not find deployment context root!");
    }
+   
+   public void testRunState() throws Exception
+   {
+      ManagementView mgtView = getManagementView();
+      Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("MBean", "WebHost"));
+      for (ManagedComponent comp : comps)
+      {
+         if ("jboss.web:host=localhost,type=Host".equals(comp.getName()))
+         {
+            assertEquals(RunState.RUNNING, comp.getRunState());
+            return;
+         }
+      }
+
+      fail("Could not find localhost Host");
+   }
+   
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list