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>