Author: davsclaus
Date: Tue Aug  2 15:10:24 2011
New Revision: 1153158

URL: http://svn.apache.org/viewvc?rev=1153158&view=rev
Log:
CAMEL-4249: Camel now check if managed object has Spring JMX annotations and 
use those, if not it fallback and use the default from camel-core.

Added:
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.java
      - copied, changed from r1153091, 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.java
    
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.xml
      - copied, changed from r1153091, 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxRecipientListTest.xml
Modified:
    
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringManagementMBeanAssembler.java

Modified: 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringManagementMBeanAssembler.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringManagementMBeanAssembler.java?rev=1153158&r1=1153157&r2=1153158&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringManagementMBeanAssembler.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringManagementMBeanAssembler.java
 Tue Aug  2 15:10:24 2011
@@ -48,12 +48,6 @@ public class SpringManagementMBeanAssemb
     }
 
     public ModelMBean assemble(MBeanServer mBeanServer, Object obj, ObjectName 
name) throws JMException {
-        // try the default first, and if it could assemble the object, then 
use that as is
-        ModelMBean mbean = super.assemble(mBeanServer, obj, name);
-        if (mbean != null) {
-            return mbean;
-        }
-
         ModelMBeanInfo mbi = null;
 
         // prefer to use the managed instance if it has been annotated with 
Spring JMX annotations
@@ -69,12 +63,19 @@ public class SpringManagementMBeanAssemb
         }
 
         if (mbi == null) {
-            // use the default provided mbean which has been annotated with 
Spring JMX annotations
-            log.trace("Assembling MBeanInfo for: {} from @ManagedResource 
object: {}", name, obj);
-            mbi = assembler.getMBeanInfo(obj, name.toString());
+            if (ObjectHelper.hasAnnotation(obj.getClass().getAnnotations(), 
ManagedResource.class)) {
+                // the object has a Spring ManagedResource annotations so 
assemble the MBeanInfo
+                log.trace("Assembling MBeanInfo for: {} from @ManagedResource 
object: {}", name, obj);
+                mbi = assembler.getMBeanInfo(obj, name.toString());
+            } else {
+                // fallback and let the default mbean assembler handle this 
instead
+                return super.assemble(mBeanServer, obj, name);
+            }
         }
 
-        mbean = (RequiredModelMBean) 
mBeanServer.instantiate(RequiredModelMBean.class.getName());
+        log.trace("Assembled MBeanInfo {}", mbi);
+
+        ModelMBean mbean = (RequiredModelMBean) 
mBeanServer.instantiate(RequiredModelMBean.class.getName());
         mbean.setModelMBeanInfo(mbi);
 
         try {

Copied: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.java
 (from r1153091, 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.java&r1=1153091&r2=1153158&rev=1153158&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.java
 Tue Aug  2 15:10:24 2011
@@ -16,41 +16,72 @@
  */
 package org.apache.camel.spring.management;
 
+import javax.management.Attribute;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.spring.SpringTestSupport;
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.jmx.export.annotation.ManagedAttribute;
+import org.springframework.jmx.export.annotation.ManagedResource;
 
 /**
  * @version 
  */
-public class SpringJmxEndpointInjectBeanTest extends SpringTestSupport {
+public class SpringManagedCustomProcessorTest extends SpringTestSupport {
 
     @Override
     protected AbstractXmlApplicationContext createApplicationContext() {
-        return new 
ClassPathXmlApplicationContext("org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.xml");
+        return new 
ClassPathXmlApplicationContext("org/apache/camel/spring/management/SpringManagedCustomProcessorTest.xml");
     }
 
     protected MBeanServer getMBeanServer() {
         return 
context.getManagementStrategy().getManagementAgent().getMBeanServer();
     }
 
-    public void testJmxEndpointInjectBean() throws Exception {
+    public void testManageCustomProcessor() throws Exception {
         MBeanServer mbeanServer = getMBeanServer();
+        ObjectName on = 
ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=processors,name=\"custom\"");
 
-        ObjectName on = 
ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=components,name=\"seda\"");
-        assertTrue(mbeanServer.isRegistered(on));
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "hey");
+        template.sendBody("direct:start", "Hello World");
+        assertMockEndpointsSatisfied();
 
-        on = 
ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"seda://foo\"");
-        assertTrue(mbeanServer.isRegistered(on));
-        String uri = (String) mbeanServer.getAttribute(on, "EndpointUri");
-        assertEquals("seda://foo", uri);
+        String foo = (String) mbeanServer.getAttribute(on, "Foo");
+        assertEquals("hey", foo);
 
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
+        // change foo
+        mbeanServer.setAttribute(on, new Attribute("Foo", "changed"));
+
+        resetMocks();
+
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", 
"changed");
+        template.sendBody("direct:start", "Bye World");
         assertMockEndpointsSatisfied();
     }
 
+    @ManagedResource(description = "My Managed Component")
+    public static class MyCustomProcessor implements Processor {
+        private String foo = "hey";
+
+        @ManagedAttribute(description = "Foo is the foo")
+        public String getFoo() {
+            return foo;
+        }
+
+        @ManagedAttribute(description = "Foo is the foo")
+        public void setFoo(String foo) {
+            this.foo = foo;
+        }
+
+        public void process(Exchange exchange) throws Exception {
+            exchange.getIn().setHeader("foo", getFoo());
+        }
+    }
+
 }

Copied: 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.xml
 (from r1153091, 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxRecipientListTest.xml)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxRecipientListTest.xml&r1=1153091&r2=1153158&rev=1153158&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxRecipientListTest.xml
 (original)
+++ 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedCustomProcessorTest.xml
 Tue Aug  2 15:10:24 2011
@@ -22,26 +22,22 @@
        http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
-    <bean id="naming" 
class="org.apache.camel.management.DefaultManagementNamingStrategy">
-        <property name="hostName" value="localhost"/>
-        <property name="domainName" value="org.apache.camel"/>
-    </bean>
+  <bean id="myProcessor" 
class="org.apache.camel.spring.management.SpringManagedCustomProcessorTest$MyCustomProcessor"/>
 
-    <!-- START SNIPPET: e1 -->
-    <camelContext xmlns="http://camel.apache.org/schema/spring";>
-        <!-- enable JMX -->
-        <jmxAgent id="agent" disabled="false"/>
+  <bean id="naming" 
class="org.apache.camel.management.DefaultManagementNamingStrategy">
+    <property name="hostName" value="localhost"/>
+    <property name="domainName" value="org.apache.camel"/>
+  </bean>
 
-        <route>
-            <from uri="direct:a"/>
-            <!-- this is a dynamic EIP so we may register mbeans after the 
route has started
-                 such as new endpoints, and its associated producers. Camel 
does NOT do this
-                 by default, you would have to enable that on the jmxAgent if 
you want this. -->
-            <recipientList>
-                <header>recipientListHeader</header>
-            </recipientList>
-        </route>
-    </camelContext>
-    <!-- END SNIPPET: e1 -->
+  <camelContext xmlns="http://camel.apache.org/schema/spring";>
+    <!-- enable JMX -->
+    <jmxAgent id="agent" disabled="false"/>
+
+    <route>
+      <from uri="direct:start"/>
+      <process ref="myProcessor" id="custom"/>
+      <to uri="mock:result"/>
+    </route>
+  </camelContext>
 
 </beans>


Reply via email to