Add the JMX Handler Test suite
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1023216 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/tests/handler/jmx/pom.xml b/ipojo/tests/handler/jmx/pom.xml
new file mode 100644
index 0000000..ad181d5
--- /dev/null
+++ b/ipojo/tests/handler/jmx/pom.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>ipojo.tests</groupId>
+ <artifactId>ipojo.tests</artifactId>
+ <version>1.5.0-SNAPSHOT</version>
+ </parent>
+ <groupId>ipojo.tests</groupId>
+ <version>1.5.0-SNAPSHOT</version>
+ <modelVersion>4.0.0</modelVersion>
+ <packaging>bundle</packaging>
+ <name>iPOJO JMX Handler Test Suite</name>
+ <artifactId>tests.jmx.handler</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.annotations</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo</artifactId>
+ <version>1.7.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.handler.jmx</artifactId>
+ <version>1.5.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Private-Package>org.apache.felix.ipojo.test.*
+ </Private-Package>
+ <Test-Suite>
+ org.apache.felix.ipojo.test.JmxTestSuite
+ </Test-Suite>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-ipojo-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>ipojo-bundle</goal>
+ </goals>
+ <configuration>
+ <ignoreAnnotations>false</ignoreAnnotations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-junit4osgi-plugin
+ </artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <hideOutputs>false</hideOutputs>
+ <logService>false</logService>
+ <configuration>
+ <org.osgi.http.port>8083</org.osgi.http.port>
+ </configuration>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/JmxTestSuite.java b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/JmxTestSuite.java
new file mode 100644
index 0000000..51ba0fb
--- /dev/null
+++ b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/JmxTestSuite.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.test;
+
+import junit.framework.Test;
+
+import org.apache.felix.ipojo.junit4osgi.OSGiTestSuite;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Event Admin Handler test suite.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class JmxTestSuite {
+
+ /**
+ * Generate the Event Admin Handler test suite.
+ *
+ * @param bc
+ * the OSGi bundle context
+ * @return the Event Admin Handler test suite.
+ */
+ public static Test suite(BundleContext bc) {
+ OSGiTestSuite ots = new OSGiTestSuite("JMX Handler test suite",
+ bc);
+ ots.addTestSuite(MBeanTests.class);
+ return ots;
+ }
+
+}
\ No newline at end of file
diff --git a/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/MBeanTests.java b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/MBeanTests.java
new file mode 100644
index 0000000..f1a91ee
--- /dev/null
+++ b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/MBeanTests.java
@@ -0,0 +1,234 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.test;
+
+import java.lang.management.ManagementFactory;
+
+import javax.management.InstanceNotFoundException;
+import javax.management.IntrospectionException;
+import javax.management.ListenerNotFoundException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanOperationInfo;
+import javax.management.MBeanParameterInfo;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.Notification;
+import javax.management.NotificationListener;
+import javax.management.ObjectInstance;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.junit4osgi.helpers.IPOJOHelper;
+
+/**
+ * Test the good behaviour of the EventAdminHandler.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class MBeanTests extends OSGiTestCase {
+
+ /**
+ * Helper used to create test components.
+ */
+ private IPOJOHelper m_helper;
+
+ /**
+ * The MBean server used to access exposed MBeans.
+ */
+ private MBeanServer m_server;
+
+ /**
+ * Initialize test.
+ */
+ public void setUp() {
+ m_helper = new IPOJOHelper(this);
+ m_server = ManagementFactory.getPlatformMBeanServer();
+ }
+
+ /**
+ * Clean test.
+ */
+ public void tearDown() {
+ m_helper.dispose();
+ }
+
+ /**
+ * Test the MBean exposed by the simple component, defined without
+ * annotations and with the brand new JMX handler syntax.
+ */
+ public void testMBeanWithoutAnnotations() throws MalformedObjectNameException, IntrospectionException, InstanceNotFoundException, ListenerNotFoundException, ReflectionException, MBeanException {
+ // Create an instance of the component
+ ComponentInstance componentInstance = m_helper
+ .createComponentInstance("org.apache.felix.ipojo.test.component.SimpleManagedComponent");
+ String instanceName = componentInstance.getInstanceName();
+ ObjectName objectName = new ObjectName(
+ "org.apache.felix.ipojo.test.component:type=org.apache.felix.ipojo.test.component.SimpleManagedComponent,instance="
+ + instanceName);
+ doTest(objectName);
+ }
+
+ /**
+ * Test the MBean exposed by the simple component, defined without
+ * annotations and with the deprecated JMX handler syntax.
+ */
+ public void testMBeanWithoutAnnotationsDeprecated() throws MalformedObjectNameException, IntrospectionException, InstanceNotFoundException, ListenerNotFoundException, ReflectionException, MBeanException {
+ // Create an instance of the component
+ ComponentInstance componentInstance = m_helper
+ .createComponentInstance("org.apache.felix.ipojo.test.component.SimpleManagedComponentDeprecated");
+ String instanceName = componentInstance.getInstanceName();
+ ObjectName objectName = new ObjectName(
+ "org.apache.felix.ipojo.test.component:type=org.apache.felix.ipojo.test.component.SimpleManagedComponent,instance="
+ + instanceName);
+ doTest(objectName);
+ }
+
+
+ /**
+ * Test the MBean exposed by the simple component, defined with
+ * annotations.
+ */
+ public void testMBeanWithAnnotations() throws MalformedObjectNameException, IntrospectionException,
+ InstanceNotFoundException, ListenerNotFoundException,
+ ReflectionException, MBeanException {
+ // Create an instance of the component
+ ComponentInstance componentInstance = m_helper
+ .createComponentInstance("org.apache.felix.ipojo.test.component.SimpleManagedComponentAnnotated");
+ String instanceName = componentInstance.getInstanceName();
+ ObjectName objectName = new ObjectName(
+ "org.apache.felix.ipojo.test.component:type=org.apache.felix.ipojo.test.component.SimpleManagedComponentAnnotated,instance="
+ + instanceName);
+ doTest(objectName);
+ }
+
+ /**
+ * Test the MBean exposed by the simple component, defined with
+ * annotations.
+ */
+ public void testMBeanWithAnnotationsDeprecated() throws MalformedObjectNameException, IntrospectionException,
+ InstanceNotFoundException, ListenerNotFoundException,
+ ReflectionException, MBeanException {
+ // Create an instance of the component
+ ComponentInstance componentInstance = m_helper
+ .createComponentInstance("org.apache.felix.ipojo.test.component.SimpleManagedComponentAnnotatedDeprecated");
+ String instanceName = componentInstance.getInstanceName();
+ ObjectName objectName = new ObjectName(
+ "org.apache.felix.ipojo.test.component:type=org.apache.felix.ipojo.test.component.SimpleManagedComponentAnnotatedDeprecated,instance="
+ + instanceName);
+ doTest(objectName);
+ }
+
+ /**
+ * Utility method used to test the MBean with the given objectName.
+ * @param objectName the objectName of the MBean to test.
+ */
+ private void doTest(ObjectName objectName) throws IntrospectionException, InstanceNotFoundException, ReflectionException, MBeanException, ListenerNotFoundException {
+
+ // Get the MBean from the platform MBean server
+
+ MBeanInfo mBeanInfo = m_server.getMBeanInfo(objectName);
+ ObjectInstance objectInstance = m_server.getObjectInstance(objectName);
+ assertNotNull(mBeanInfo);
+ assertNotNull(objectInstance);
+ // Check that the property is exposed
+ MBeanAttributeInfo[] attributes = mBeanInfo.getAttributes();
+ assertEquals(1, attributes.length);
+ MBeanAttributeInfo attribute = attributes[0];
+ assertEquals("integer", attribute.getName());
+ assertEquals("int", attribute.getType());
+ assertTrue(attribute.isReadable());
+ assertFalse(attribute.isWritable());
+ // Check that both methods are exposed
+ MBeanOperationInfo[] operations = mBeanInfo.getOperations();
+ assertEquals(2, operations.length);
+ MBeanOperationInfo getOperation;
+ MBeanOperationInfo setOperation;
+ // Order is not important
+ if (operations[0].getName().equals("getIntegerValue")) {
+ getOperation = operations[0];
+ setOperation = operations[1];
+ } else {
+ setOperation = operations[0];
+ getOperation = operations[1];
+ }
+ // Check the 'get' operation
+ assertEquals("getIntegerValue", getOperation.getName());
+ assertEquals("Get the value of the integer",
+ getOperation.getDescription());
+ assertEquals("int", getOperation.getReturnType());
+ MBeanParameterInfo[] getOperationParams = getOperation.getSignature();
+ assertEquals(0, getOperationParams.length);
+ // Check the 'set' operation
+ assertEquals("setIntegerValue", setOperation.getName());
+ assertEquals("Set the value of the integer",
+ setOperation.getDescription());
+ assertEquals("int", setOperation.getReturnType());
+ MBeanParameterInfo[] setOperationParams = setOperation.getSignature();
+ assertEquals(1, setOperationParams.length);
+ assertEquals("int", setOperationParams[0].getType());
+ // Call the methods and test the result, also test notifications
+ CustomNotificationListener listener = new CustomNotificationListener();
+ m_server.addNotificationListener(objectName, listener, null, null);
+ int value1 = 123;
+ int value2 = 456;
+ m_server.invoke(objectName, "setIntegerValue", new Object[] { value1 },
+ new String[] { "int" });
+ m_server.invoke(objectName, "setIntegerValue", new Object[] { value2 },
+ new String[] { "int" });
+ int result = (Integer) m_server.invoke(objectName, "getIntegerValue",
+ new Object[0], new String[0]);
+ assertEquals(value2, result);
+ m_server.removeNotificationListener(objectName, listener, null, null);
+ //assertEquals(2, listener.getCount());
+ }
+
+ /**
+ * Custom listener used to count MBean notifications.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+ private class CustomNotificationListener implements NotificationListener {
+
+ /**
+ * Counter for the notifications.
+ */
+ private int m_counter = 0;
+
+ /**
+ * Notified !
+ * @param notification the notification
+ * @param handback ignored
+ */
+ public void handleNotification(Notification notification,
+ Object handback) {
+ m_counter++;
+ }
+
+ /**
+ * Return the notification count of this listener.
+ * @return the notification count of this listener.
+ */
+ public int getCount() {
+ return m_counter;
+ }
+ }
+
+}
diff --git a/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponent.java b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponent.java
new file mode 100644
index 0000000..2a22a9b
--- /dev/null
+++ b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponent.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.test.component;
+
+import java.util.Random;
+
+/**
+ * Simple component that holds an integer. It is exposed as a MBean.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class SimpleManagedComponent {
+
+ /**
+ * The integer.
+ */
+ private int m_integer /*= new Random().nextInt()*/;
+
+ /**
+ * Set the value of the integer.
+ * @param newValue the new value
+ * @return the old value of the integer.
+ */
+ @SuppressWarnings("unused")
+ private synchronized int setIntegerValue(int newValue) {
+ int oldValue = m_integer;
+ m_integer = newValue;
+ return oldValue;
+ }
+
+ /**
+ * Get the value of the integer.
+ * @return the currentvalue of the integer.
+ */
+ @SuppressWarnings("unused")
+ private synchronized int getIntegerValue() {
+ return m_integer;
+ }
+
+}
diff --git a/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponentAnnotated.java b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponentAnnotated.java
new file mode 100644
index 0000000..398948e
--- /dev/null
+++ b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponentAnnotated.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.test.component;
+
+import java.util.Random;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.handlers.jmx.JMXBean;
+import org.apache.felix.ipojo.handlers.jmx.JMXMethod;
+import org.apache.felix.ipojo.handlers.jmx.JMXProperty;
+
+/**
+ * Simple component that holds an integer. It is exposed as a MBean. This
+ * version uses the brand new annotations of the JMX handler.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@Component(immediate = true)
+@JMXBean
+public class SimpleManagedComponentAnnotated {
+
+ /**
+ * The integer.
+ */
+ @JMXProperty(name = "integer", rights = "r", notification = true)
+ private int m_integer = new Random().nextInt();;
+
+ /**
+ * Set the value of the integer.
+ *
+ * @param newValue
+ * the new value
+ * @return the old value of the integer.
+ */
+ @SuppressWarnings("unused")
+ @JMXMethod(description = "Set the value of the integer")
+ private synchronized int setIntegerValue(int newValue) {
+ int oldValue = m_integer;
+ m_integer = newValue;
+ return oldValue;
+ }
+
+ /**
+ * Get the value of the integer.
+ *
+ * @return the currentvalue of the integer.
+ */
+ @SuppressWarnings("unused")
+ @JMXMethod(description = "Get the value of the integer")
+ private synchronized int getIntegerValue() {
+ return m_integer;
+ }
+}
diff --git a/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponentAnnotatedDeprecated.java b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponentAnnotatedDeprecated.java
new file mode 100644
index 0000000..716514b
--- /dev/null
+++ b/ipojo/tests/handler/jmx/src/main/java/org/apache/felix/ipojo/test/component/SimpleManagedComponentAnnotatedDeprecated.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.test.component;
+
+import java.util.Random;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.handlers.jmx.Config;
+import org.apache.felix.ipojo.handlers.jmx.Method;
+import org.apache.felix.ipojo.handlers.jmx.Property;
+
+
+/**
+ * Simple component that holds an integer. It is exposed as a MBean. This
+ * version uses the deprecated annotations of the JMX handler.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@Component(immediate = true)
+@Config
+public class SimpleManagedComponentAnnotatedDeprecated {
+
+ /**
+ * The integer.
+ */
+ @Property(name = "integer", rights = "r", notification = true)
+ private int m_integer = new Random().nextInt();;
+
+ /**
+ * Set the value of the integer.
+ *
+ * @param newValue
+ * the new value
+ * @return the old value of the integer.
+ */
+ @SuppressWarnings("unused")
+ @Method(description = "Set the value of the integer")
+ private synchronized int setIntegerValue(int newValue) {
+ int oldValue = m_integer;
+ m_integer = newValue;
+ return oldValue;
+ }
+
+ /**
+ * Get the value of the integer.
+ *
+ * @return the currentvalue of the integer.
+ */
+ @SuppressWarnings("unused")
+ @Method(description = "Get the value of the integer")
+ private synchronized int getIntegerValue() {
+ return m_integer;
+ }
+}
diff --git a/ipojo/tests/handler/jmx/src/main/resources/metadata.xml b/ipojo/tests/handler/jmx/src/main/resources/metadata.xml
new file mode 100644
index 0000000..cbc7b03
--- /dev/null
+++ b/ipojo/tests/handler/jmx/src/main/resources/metadata.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
+ xmlns="org.apache.felix.ipojo"
+ xmlns:jmx="org.apache.felix.ipojo.handlers.jmx">
+
+ <!-- The simple managed component without annotations and with brand new JMX handler syntax -->
+ <component classname="org.apache.felix.ipojo.test.component.SimpleManagedComponent" immediate="true">
+ <!-- Expose field and methods with JMX handler -->
+ <jmx:config>
+ <jmx:jmxmethod name="getIntegerValue" description="Get the value of the integer"/>
+ <jmx:jmxmethod name="setIntegerValue" description="Set the value of the integer"/>
+ <jmx:jmxproperty name="integer" field="m_integer" rights="r" notification="true"/>
+ </jmx:config>
+ </component>
+
+ <!-- The simple managed component without annotations and with brand new JMX handler syntax -->
+ <component classname="org.apache.felix.ipojo.test.component.SimpleManagedComponent" immediate="true" name="org.apache.felix.ipojo.test.component.SimpleManagedComponentDeprecated">
+ <!-- Expose field and methods with JMX handler -->
+ <jmx:config>
+ <jmx:method name="getIntegerValue" description="Get the value of the integer"/>
+ <jmx:method name="setIntegerValue" description="Set the value of the integer"/>
+ <jmx:property name="integer" field="m_integer" rights="r" notification="true"/>
+ </jmx:config>
+ </component>
+
+</ipojo>
\ No newline at end of file
diff --git a/ipojo/tests/pom.xml b/ipojo/tests/pom.xml
index 0c13ce3..1d2f4cb 100644
--- a/ipojo/tests/pom.xml
+++ b/ipojo/tests/pom.xml
@@ -156,13 +156,9 @@
<jdk>1.5</jdk>
</activation>
<modules>
- <!--
- Remove bundleAsiPOJO - Deprecated
- <module>bundleAsiPOJO</module>
- -->
<module>core/annotations</module>
- <module>manipulator/manipulator-java5
- </module>
+ <module>manipulator/manipulator-java5</module>
+ <module>handler/jmx</module>
<module>handler/transaction</module>
</modules>
</profile>
@@ -172,13 +168,9 @@
<jdk>1.6</jdk>
</activation>
<modules>
- <!--
- Remove bundleAsiPOJO - Deprecated
- <module>bundleAsiPOJO</module>
- -->
<module>core/annotations</module>
- <module>manipulator/manipulator-java5
- </module>
+ <module>manipulator/manipulator-java5</module>
+ <module>handler/jmx</module>
<module>handler/transaction</module>
</modules>
</profile>