[jboss-cvs] JBossAS SVN: r76023 - in trunk/system-jmx/src: resources/tests/org/jboss/test/system/controller/integration/test and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Jul 20 08:49:40 EDT 2008


Author: alesj
Date: 2008-07-20 08:49:40 -0400 (Sun, 20 Jul 2008)
New Revision: 76023

Added:
   trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/support/ExposeJMXAttributeChecker.java
Modified:
   trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx/JMXAnnotationPlugin.java
   trunk/system-jmx/src/resources/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationPluginTestCase-mc.xml
   trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationPluginTestCase.java
   trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationTestCase.java
Log:
Fix JMXAnnotationPlugin.

Modified: trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx/JMXAnnotationPlugin.java
===================================================================
--- trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx/JMXAnnotationPlugin.java	2008-07-20 12:42:24 UTC (rev 76022)
+++ trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx/JMXAnnotationPlugin.java	2008-07-20 12:49:40 UTC (rev 76023)
@@ -21,8 +21,11 @@
 */
 package org.jboss.system.microcontainer.jmx;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
+import org.jboss.annotation.factory.AnnotationProxy;
 import org.jboss.aop.microcontainer.aspects.jmx.JMX;
 import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
@@ -48,6 +51,11 @@
       super(JMX.class);
    }
 
+   protected boolean isCleanup()
+   {
+      return true;
+   }
+
    protected List<? extends MetaDataVisitorNode> internalApplyAnnotation(T info, MetaData metaData, JMX jmx, KernelControllerContext context) throws Throwable
    {
       Class<?> exposedInterface = jmx.exposedInterface();
@@ -61,8 +69,9 @@
       if (log.isTraceEnabled())
          log.trace("Exposing " + context.getName() + "." + property + " (" + exposedInterface.getName() + ") via objectName: " + name);
 
-      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(name, exposedInterface.getName());
-      builder.addAnnotation(jmx);
+      String id = createId(context, info, jmx);
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(id, exposedInterface.getName());
+      builder.addAnnotation(wrapJMX(jmx, name, exposedInterface));
       builder.setConstructorValue(new AbstractDependencyValueMetaData(context.getName(), property));
 
       KernelController controller = (KernelController)context.getController();
@@ -72,14 +81,46 @@
       return null;
    }
 
+   /**
+    * Create unique id for the exposed pojo attribute.
+    *
+    * @param context the context
+    * @param info the info
+    * @param jmx the annotation
+    * @return generated id
+    */
+   protected String createId(KernelControllerContext context, T info, JMX jmx)
+   {
+      return context.getName() + "." + getName(info) + "." + jmx.hashCode();
+   }
+
+   /**
+    * Should we wrap the original
+    * in order to get the name we created.
+    *
+    * @param original the original
+    * @param name the new created name
+    * @param exposedInterface the exposed interface
+    * @return jmx annoation instance
+    * @throws Throwable for any error
+    */
+   protected JMX wrapJMX(JMX original, String name, Class<?> exposedInterface) throws Throwable
+   {
+      Map<String, Object> attributes = new HashMap<String, Object>();
+      attributes.put("exposedInterface", exposedInterface);
+      attributes.put("name", name);
+      attributes.put("registerDirectly", original.registerDirectly());
+      return (JMX)AnnotationProxy.createProxy(attributes, JMX.class);
+   }
+
    protected void internalCleanAnnotation(T info, MetaData metaData, JMX jmx, KernelControllerContext context) throws Throwable
    {
-      String name = createObjectName(context, info, jmx);
+      String id = createId(context, info, jmx);
       if (log.isTraceEnabled())
-         log.trace("Removing " + context.getName() + "." + getName(info) + " via objectName: " + name);
+         log.trace("Removing " + context.getName() + "." + getName(info) + " via id: " + id);
 
       Controller controller = context.getController();
-      controller.uninstall(name);
+      controller.uninstall(id);
    }
 
    /**
@@ -99,22 +140,34 @@
    protected abstract String getName(T info);
 
    /**
+    * Get jmx name.
+    *
+    * @param jmx the JMX annotation
+    * @return valid jmx name
+    */
+   protected static String getJmxName(JMX jmx)
+   {
+      String jmxName = jmx.name();
+      if (jmxName != null && jmxName.length() > 0)
+         return jmxName;
+
+      return null;
+   }
+
+   /**
     * Create object name.
     *
     * @param context the context
     * @param info the info
     * @param jmx the annotation
-    * @return obejct name
+    * @return object name
     * @throws Exception for any error
     */
    protected String createObjectName(ControllerContext context, T info, JMX jmx) throws Exception
    {
-      if (jmx != null)
-      {
-         String jmxName = jmx.name();
-         if (jmxName != null && jmxName.length() > 0)
-            return jmxName;
-      }
+      String jmxName = getJmxName(jmx);
+      if (jmxName != null)
+         return jmxName;
 
       // try to build one from the bean name and  info param
       String name = context.getName().toString();

Modified: trunk/system-jmx/src/resources/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationPluginTestCase-mc.xml
===================================================================
--- trunk/system-jmx/src/resources/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationPluginTestCase-mc.xml	2008-07-20 12:42:24 UTC (rev 76022)
+++ trunk/system-jmx/src/resources/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationPluginTestCase-mc.xml	2008-07-20 12:49:40 UTC (rev 76023)
@@ -14,6 +14,14 @@
       </property>
    </bean>
 
+   <bean name="ExposeJMXAttributeChecker" class="org.jboss.test.system.controller.integration.support.ExposeJMXAttributeChecker">
+     <constructor>
+       <parameter><inject bean="jboss.kernel:service=KernelController"/></parameter>
+       <parameter><inject bean="jboss.kernel:service=KernelRegistry"/></parameter>
+       <parameter><inject/></parameter>
+     </constructor>
+   </bean>
+
    <bean name="AnnotationHandlerFactory">
       <constructor factoryClass="org.jboss.kernel.plugins.annotations.BeanAnnotationAdapterFactory" factoryMethod="getInstance" />
    </bean>

Copied: trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/support/ExposeJMXAttributeChecker.java (from rev 76019, trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/support/ExposeJMXAttribute.java)
===================================================================
--- trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/support/ExposeJMXAttributeChecker.java	                        (rev 0)
+++ trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/support/ExposeJMXAttributeChecker.java	2008-07-20 12:49:40 UTC (rev 76023)
@@ -0,0 +1,131 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.system.controller.integration.support;
+
+import org.jboss.aop.microcontainer.aspects.jmx.JMX;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.LifecycleCallbackItem;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.event.KernelEvent;
+import org.jboss.kernel.spi.event.KernelEventEmitter;
+import org.jboss.kernel.spi.event.KernelEventListener;
+import org.jboss.metadata.spi.MetaData;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class ExposeJMXAttributeChecker implements KernelEventListener
+{
+   private KernelController controller;
+   private KernelEventEmitter emitter;
+   private TestServiceControllerLifecycleCallback service;
+
+   public ExposeJMXAttributeChecker(
+         KernelController controller,
+         KernelEventEmitter emitter,
+         TestServiceControllerLifecycleCallback service)
+   {
+      this.controller = controller;
+      this.emitter = emitter;
+      this.service = service;
+   }
+
+   public void create() throws Throwable
+   {
+      emitter.registerListener(this, null, null);
+   }
+
+   public void destroy() throws Throwable
+   {
+      emitter.unregisterListener(this, null, null);
+   }
+
+   @SuppressWarnings("deprecation")
+   public void onEvent(KernelEvent event, Object o)
+   {
+      try
+      {
+         if (org.jboss.kernel.spi.registry.KernelRegistry.KERNEL_REGISTRY_REGISTERED.equals(event.getType()))
+         {
+            ControllerContext context = controller.getContext(event.getContext(), null);
+            addControllerContext(context);
+         }
+      }
+      catch (Throwable ignored)
+      {
+      }
+   }
+
+   private JMX readJmxAnnotation(ControllerContext context) throws Exception
+   {
+      MetaData metaData = context.getScopeInfo().getMetaData();
+      if (metaData != null)
+         return metaData.getAnnotation(JMX.class);
+      return null;
+   }
+
+   public void addControllerContext(ControllerContext context) throws Throwable
+   {
+      JMX jmx = readJmxAnnotation(context);
+      if (jmx != null)
+      {
+         DependencyInfo info = context.getDependencyInfo();
+         info.addLifecycleCallback(new ServiceLifecycleCallback());
+      }
+   }
+
+   private class ServiceLifecycleCallback implements LifecycleCallbackItem
+   {
+      public Object getBean()
+      {
+         return null;
+      }
+
+      public ControllerState getWhenRequired()
+      {
+         return ControllerState.INSTALLED;
+      }
+
+      public ControllerState getDependentState()
+      {
+         return ControllerState.INSTALLED;
+      }
+
+      public void install(ControllerContext ctx) throws Exception
+      {
+         service.install(ctx);
+      }
+
+      public void uninstall(ControllerContext ctx)
+      {
+         try
+         {
+            service.uninstall(ctx);
+         }
+         catch (Exception ignored)
+         {
+         }
+      }
+   }
+}
\ No newline at end of file

Modified: trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationPluginTestCase.java
===================================================================
--- trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationPluginTestCase.java	2008-07-20 12:42:24 UTC (rev 76022)
+++ trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationPluginTestCase.java	2008-07-20 12:49:40 UTC (rev 76023)
@@ -23,9 +23,11 @@
 
 import junit.framework.Test;
 import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
 import org.jboss.test.system.controller.integration.support.MockTransactionManagerMBean;
 import org.jboss.test.system.controller.integration.support.MockUnifiedInvokerMBean;
-import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.system.microcontainer.ServiceControllerContext;
 
 /**
  * JMXAnnotationPluginTestCase.
@@ -51,19 +53,27 @@
       // getter
       ControllerContext mbeanContext = getControllerContext("jboss:service=invoker,type=getter");
       assertNotNull(mbeanContext);
+      assertInstanceOf(mbeanContext, ServiceControllerContext.class);
+      assertEquals(ControllerState.INSTALLED, mbeanContext.getState());
       assertInstanceOf(MockUnifiedInvokerMBean.class, mbeanContext.getTarget());
       // field
       mbeanContext = getControllerContext("jboss:service=invoker,type=field");
       assertNotNull(mbeanContext);
+      assertInstanceOf(mbeanContext, ServiceControllerContext.class);
+      assertEquals(ControllerState.INSTALLED, mbeanContext.getState());
       assertInstanceOf(MockUnifiedInvokerMBean.class, mbeanContext.getTarget());
 
       // getter
-      ControllerContext tmJMXContext = getControllerContext("jboss.pojo:name='ExposeJMXAttribute',attribute=tm");
+      ControllerContext tmJMXContext = getControllerContext("jboss.pojo:attribute=tm,name='ExposeJMXAttribute'");
       assertNotNull(tmJMXContext);
+      assertInstanceOf(tmJMXContext, ServiceControllerContext.class);
+      assertEquals(ControllerState.INSTALLED, tmJMXContext.getState());
       assertInstanceOf(MockTransactionManagerMBean.class, tmJMXContext.getTarget());
       // field
-      tmJMXContext = getControllerContext("jboss.pojo:name='ExposeJMXAttribute',attribute=tmField");
+      tmJMXContext = getControllerContext("jboss.pojo:attribute=tmField,name='ExposeJMXAttribute'");
       assertNotNull(tmJMXContext);
+      assertInstanceOf(tmJMXContext, ServiceControllerContext.class);
+      assertEquals(ControllerState.INSTALLED, tmJMXContext.getState());
       assertInstanceOf(MockTransactionManagerMBean.class, tmJMXContext.getTarget());
 
       validate();

Modified: trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationTestCase.java
===================================================================
--- trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationTestCase.java	2008-07-20 12:42:24 UTC (rev 76022)
+++ trunk/system-jmx/src/tests/org/jboss/test/system/controller/integration/test/JMXAnnotationTestCase.java	2008-07-20 12:49:40 UTC (rev 76023)
@@ -27,6 +27,7 @@
 import org.jboss.kernel.spi.deployment.KernelDeployment;
 import org.jboss.test.system.controller.integration.support.MockTransactionManagerMBean;
 import org.jboss.test.system.controller.integration.support.MockUnifiedInvokerMBean;
+import org.jboss.system.microcontainer.ServiceControllerContext;
 
 /**
  * JMXAnnotationTestCase.
@@ -56,6 +57,7 @@
       // jmx
       ControllerContext tmJMXContext = getControllerContext("jboss:service=TransactionManager2");
       assertNotNull(tmJMXContext);
+      assertInstanceOf(tmJMXContext, ServiceControllerContext.class);
       assertEquals(ControllerState.INSTALLED, tmJMXContext.getState());
       Object bean = tmMCContext.getTarget();
 
@@ -64,6 +66,7 @@
 
       ControllerContext mbeanContext = getControllerContext("jboss:service=invoker,type=unified");
       assertNotNull(mbeanContext);
+      assertInstanceOf(mbeanContext, ServiceControllerContext.class);
       assertEquals(ControllerState.INSTALLED, mbeanContext.getState());
       Object mbean = mbeanContext.getTarget();
       assertNotNull(mbean);




More information about the jboss-cvs-commits mailing list