[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