Author: davsclaus
Date: Sun Jul 31 18:14:30 2011
New Revision: 1152607

URL: http://svn.apache.org/viewvc?rev=1152607&view=rev
Log:
CAMEL-4247: Introduced ManagementMBeanAssembler as SPI to be able to move 
spring JMX logic from camel-core to camel-spring.

Added:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
      - copied, changed from r1152571, 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementMBeanAssembler.java
    
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringManagementMBeanAssembler.java
Removed:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
    
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
    camel/trunk/tests/camel-itest-standalone/pom.xml

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=1152607&r1=1152606&r2=1152607&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java 
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Sun 
Jul 31 18:14:30 2011
@@ -40,6 +40,7 @@ import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.LifecycleStrategy;
+import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.PackageScanClassResolver;
@@ -573,6 +574,13 @@ public interface CamelContext extends Su
     Injector getInjector();
 
     /**
+     * Returns the management mbean assembler
+     *
+     * @return the mbean assembler
+     */
+    ManagementMBeanAssembler getManagementMBeanAssembler();
+
+    /**
      * Returns the lifecycle strategies used to handle lifecycle notifications
      *
      * @return the lifecycle strategies
@@ -910,18 +918,18 @@ public interface CamelContext extends Su
     void setShutdownStrategy(ShutdownStrategy shutdownStrategy);
 
     /**
-     * Gets the current {@link org.apache.camel.spi.ExecutorServiceStrategy}
+     * Gets the current {@link org.apache.camel.spi.ExecutorServiceManager}
      *
-     * @return the strategy
+     * @return the manager
      */
     ExecutorServiceManager getExecutorServiceManager();
 
     /**
-     * Sets a custom {@link org.apache.camel.spi.ExecutorServiceStrategy}
+     * Sets a custom {@link org.apache.camel.spi.ExecutorServiceManager}
      *
-     * @param executorServiceStrategy the custom strategy
+     * @param executorServiceManager the custom manager
      */
-    void setExecutorServiceManager(ExecutorServiceManager 
executorServiceStrategy);
+    void setExecutorServiceManager(ExecutorServiceManager 
executorServiceManager);
 
     /**
      * Gets the current {@link org.apache.camel.spi.ProcessorFactory}

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1152607&r1=1152606&r2=1152607&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 Sun Jul 31 18:14:30 2011
@@ -34,7 +34,6 @@ import java.util.TreeMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
-
 import javax.naming.Context;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
@@ -72,6 +71,7 @@ import org.apache.camel.impl.converter.D
 import org.apache.camel.impl.converter.LazyLoadingTypeConverter;
 import org.apache.camel.management.DefaultManagementAgent;
 import org.apache.camel.management.DefaultManagementLifecycleStrategy;
+import org.apache.camel.management.DefaultManagementMBeanAssembler;
 import org.apache.camel.management.DefaultManagementStrategy;
 import org.apache.camel.management.JmxSystemPropertyKeys;
 import org.apache.camel.management.ManagedManagementStrategy;
@@ -101,6 +101,7 @@ import org.apache.camel.spi.InterceptStr
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.LanguageResolver;
 import org.apache.camel.spi.LifecycleStrategy;
+import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.PackageScanClassResolver;
@@ -153,6 +154,7 @@ public class DefaultCamelContext extends
     private Registry registry;
     private List<LifecycleStrategy> lifecycleStrategies = new 
ArrayList<LifecycleStrategy>();
     private ManagementStrategy managementStrategy;
+    private ManagementMBeanAssembler managementMBeanAssembler;
     private AtomicBoolean managementStrategyInitialized = new 
AtomicBoolean(false);
     private final List<RouteDefinition> routeDefinitions = new 
ArrayList<RouteDefinition>();
     private List<InterceptStrategy> interceptStrategies = new 
ArrayList<InterceptStrategy>();
@@ -1034,6 +1036,17 @@ public class DefaultCamelContext extends
         this.injector = injector;
     }
 
+    public ManagementMBeanAssembler getManagementMBeanAssembler() {
+        if (managementMBeanAssembler == null) {
+            managementMBeanAssembler = createManagementMBeanAssembler();
+        }
+        return managementMBeanAssembler;
+    }
+
+    public void setManagementMBeanAssembler(ManagementMBeanAssembler 
managementMBeanAssembler) {
+        this.managementMBeanAssembler = managementMBeanAssembler;
+    }
+
     public ComponentResolver getComponentResolver() {
         if (componentResolver == null) {
             componentResolver = createComponentResolver();
@@ -2000,6 +2013,13 @@ public class DefaultCamelContext extends
     /**
      * Lazily create a default implementation
      */
+    protected ManagementMBeanAssembler createManagementMBeanAssembler() {
+        return new DefaultManagementMBeanAssembler();
+    }
+
+    /**
+     * Lazily create a default implementation
+     */
     protected ComponentResolver createComponentResolver() {
         return new DefaultComponentResolver();
     }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java?rev=1152607&r1=1152606&r2=1152607&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
 Sun Jul 31 18:14:30 2011
@@ -41,6 +41,7 @@ import org.apache.camel.CamelContextAwar
 import org.apache.camel.builder.ThreadPoolBuilder;
 import org.apache.camel.impl.ServiceSupport;
 import org.apache.camel.spi.ManagementAgent;
+import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,7 +62,6 @@ public class DefaultManagementAgent exte
     private ExecutorService executorService;
     private MBeanServer server;
     private final Set<ObjectName> mbeansRegistered = new HashSet<ObjectName>();
-    private JmxMBeanAssembler assembler;
     private JMXConnectorServer cs;
 
     private Integer registryPort;
@@ -232,7 +232,9 @@ public class DefaultManagementAgent exte
             registerMBeanWithServer(obj, name, forceRegistration);
         } catch (NotCompliantMBeanException e) {
             // If this is not a "normal" MBean, then try to deploy it using 
JMX annotations
-            Object mbean = assembler.assemble(obj, name);
+            ManagementMBeanAssembler assembler = 
camelContext.getManagementMBeanAssembler();
+            ObjectHelper.notNull(assembler, "ManagementMBeanAssembler", 
camelContext);
+            Object mbean = assembler.assemble(server, obj, name);
             // and register the mbean
             registerMBeanWithServer(mbean, name, forceRegistration);
         }
@@ -259,8 +261,6 @@ public class DefaultManagementAgent exte
             createMBeanServer();
         }
 
-        assembler = new JmxMBeanAssembler(server);
-
         LOG.debug("Starting JMX agent on server: {}", getMBeanServer());
     }
 

Copied: 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
 (from r1152571, 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java&r1=1152571&r2=1152607&rev=1152607&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
 Sun Jul 31 18:14:30 2011
@@ -20,10 +20,12 @@ import javax.management.JMException;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.management.modelmbean.InvalidTargetObjectTypeException;
+import javax.management.modelmbean.ModelMBean;
 import javax.management.modelmbean.ModelMBeanInfo;
 import javax.management.modelmbean.RequiredModelMBean;
 
 import org.apache.camel.management.mbean.ManagedInstance;
+import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,31 +34,32 @@ import org.springframework.jmx.export.an
 import org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler;
 
 /**
- * An assembler to assemble a {@link 
javax.management.modelmbean.RequiredModelMBean} which can be used
- * to register the object in JMX. The assembler is capable of using the Spring 
JMX annotations to
+ * An assembler to assemble a {@link javax.management.modelmbean.ModelMBean} 
which can be used
+ * to register the object in JMX. The assembler is capable of using the Camel 
JMX annotations to
  * gather the list of JMX operations and attributes.
  *
  * @version 
  */
-public class JmxMBeanAssembler {
-    private static final Logger LOG = 
LoggerFactory.getLogger(JmxMBeanAssembler.class);
+public class DefaultManagementMBeanAssembler implements 
ManagementMBeanAssembler {
+    protected final Logger log = LoggerFactory.getLogger(getClass());
     private final MetadataMBeanInfoAssembler assembler;
-    private final MBeanServer server;
 
-    public JmxMBeanAssembler(MBeanServer server) {
-        this.server = server;
+    // TODO: Introduce Camel JMX annotations and implement logic to assemble 
from those JMX annotations
+    // TODO: Remove spring logic when no longer needed
+
+    public DefaultManagementMBeanAssembler() {
         this.assembler = new MetadataMBeanInfoAssembler();
         this.assembler.setAttributeSource(new AnnotationJmxAttributeSource());
     }
 
-    public RequiredModelMBean assemble(Object obj, ObjectName name) throws 
JMException {
+    public ModelMBean assemble(MBeanServer mBeanServer, Object obj, ObjectName 
name) throws JMException {
         ModelMBeanInfo mbi = null;
 
         // prefer to use the managed instance if it has been annotated with 
Spring JMX annotations
         if (obj instanceof ManagedInstance) {
             Object custom = ((ManagedInstance) obj).getInstance();
             if (custom != null && 
ObjectHelper.hasAnnotation(custom.getClass().getAnnotations(), 
ManagedResource.class)) {
-                LOG.trace("Assembling MBeanInfo for: {} from custom 
@ManagedResource object: {}", name, custom);
+                log.trace("Assembling MBeanInfo for: {} from custom 
@ManagedResource object: {}", name, custom);
                 // get the mbean info from the custom managed object
                 mbi = assembler.getMBeanInfo(custom, name.toString());
                 // and let the custom object be registered in JMX
@@ -66,11 +69,11 @@ public class JmxMBeanAssembler {
 
         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);
+            log.trace("Assembling MBeanInfo for: {} from @ManagedResource 
object: {}", name, obj);
             mbi = assembler.getMBeanInfo(obj, name.toString());
         }
 
-        RequiredModelMBean mbean = (RequiredModelMBean) 
server.instantiate(RequiredModelMBean.class.getName());
+        RequiredModelMBean mbean = (RequiredModelMBean) 
mBeanServer.instantiate(RequiredModelMBean.class.getName());
         mbean.setModelMBeanInfo(mbi);
 
         try {

Added: 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementMBeanAssembler.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementMBeanAssembler.java?rev=1152607&view=auto
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementMBeanAssembler.java
 (added)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementMBeanAssembler.java
 Sun Jul 31 18:14:30 2011
@@ -0,0 +1,41 @@
+/**
+ * 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.camel.spi;
+
+import javax.management.JMException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.modelmbean.ModelMBean;
+
+/**
+ * An assembler to assemble a {@link 
javax.management.modelmbean.RequiredModelMBean} which can be used
+ * to register the object in JMX.
+ */
+public interface ManagementMBeanAssembler {
+
+    /**
+     * Assemble the {@link javax.management.modelmbean.ModelMBean}.
+     *
+     * @param mBeanServer the mbean server
+     * @param obj         the object
+     * @param name        the object name to use in JMX
+     * @return the assembled {@link javax.management.modelmbean.ModelMBean}
+     * @throws JMException is thrown if error assembling the mbean
+     */
+    ModelMBean assemble(MBeanServer mBeanServer, Object obj, ObjectName name) 
throws JMException;
+
+}

Modified: 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java?rev=1152607&r1=1152606&r2=1152607&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
 Sun Jul 31 18:14:30 2011
@@ -23,9 +23,11 @@ import org.apache.camel.component.event.
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.ProcessorEndpoint;
 import org.apache.camel.spi.Injector;
+import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spring.spi.ApplicationContextRegistry;
 import org.apache.camel.spring.spi.SpringInjector;
+import org.apache.camel.spring.spi.SpringManagementMBeanAssembler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeansException;
@@ -55,18 +57,19 @@ public class SpringCamelContext extends 
         ApplicationContextAware {
 
     private static final transient Logger LOG = 
LoggerFactory.getLogger(SpringCamelContext.class);
-    
     private static final ThreadLocal<Boolean> NO_START = new 
ThreadLocal<Boolean>();
-    
     private ApplicationContext applicationContext;
     private EventEndpoint eventEndpoint;
 
     public SpringCamelContext() {
+        super();
     }
 
     public SpringCamelContext(ApplicationContext applicationContext) {
+        this();
         setApplicationContext(applicationContext);
     }
+
     public static void setNoStart(boolean b) {
         if (b) {
             NO_START.set(b);
@@ -183,6 +186,12 @@ public class SpringCamelContext extends 
         }
     }
 
+    @Override
+    protected ManagementMBeanAssembler createManagementMBeanAssembler() {
+        // use a spring mbean assembler
+        return new SpringManagementMBeanAssembler();
+    }
+
     protected EventEndpoint createEventEndpoint() {
         return getEndpoint("spring-event:default", EventEndpoint.class);
     }

Added: 
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=1152607&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringManagementMBeanAssembler.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringManagementMBeanAssembler.java
 Sun Jul 31 18:14:30 2011
@@ -0,0 +1,89 @@
+/**
+ * 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.camel.spring.spi;
+
+import javax.management.JMException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.modelmbean.InvalidTargetObjectTypeException;
+import javax.management.modelmbean.ModelMBean;
+import javax.management.modelmbean.ModelMBeanInfo;
+import javax.management.modelmbean.RequiredModelMBean;
+
+import org.apache.camel.management.DefaultManagementMBeanAssembler;
+import org.apache.camel.management.mbean.ManagedInstance;
+import org.apache.camel.util.ObjectHelper;
+import org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource;
+import org.springframework.jmx.export.annotation.ManagedResource;
+import org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler;
+
+/**
+ * An assembler to assemble a {@link javax.management.modelmbean.ModelMBean} 
which can be used
+ * to register the object in JMX. The assembler is capable of using the Spring 
JMX annotations to
+ * gather the list of JMX operations and attributes.
+ *
+ */
+public class SpringManagementMBeanAssembler extends 
DefaultManagementMBeanAssembler {
+
+    private final MetadataMBeanInfoAssembler assembler;
+
+    public SpringManagementMBeanAssembler() {
+        super();
+        this.assembler = new MetadataMBeanInfoAssembler();
+        this.assembler.setAttributeSource(new AnnotationJmxAttributeSource());
+    }
+
+    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
+        if (obj instanceof ManagedInstance) {
+            Object custom = ((ManagedInstance) obj).getInstance();
+            if (custom != null && 
ObjectHelper.hasAnnotation(custom.getClass().getAnnotations(), 
ManagedResource.class)) {
+                log.trace("Assembling MBeanInfo for: {} from custom 
@ManagedResource object: {}", name, custom);
+                // get the mbean info from the custom managed object
+                mbi = assembler.getMBeanInfo(custom, name.toString());
+                // and let the custom object be registered in JMX
+                obj = custom;
+            }
+        }
+
+        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());
+        }
+
+        mbean = (RequiredModelMBean) 
mBeanServer.instantiate(RequiredModelMBean.class.getName());
+        mbean.setModelMBeanInfo(mbi);
+
+        try {
+            mbean.setManagedResource(obj, "ObjectReference");
+        } catch (InvalidTargetObjectTypeException e) {
+            throw new JMException(e.getMessage());
+        }
+
+        return mbean;
+    }
+
+}

Modified: camel/trunk/tests/camel-itest-standalone/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-standalone/pom.xml?rev=1152607&r1=1152606&r2=1152607&view=diff
==============================================================================
--- camel/trunk/tests/camel-itest-standalone/pom.xml (original)
+++ camel/trunk/tests/camel-itest-standalone/pom.xml Sun Jul 31 18:14:30 2011
@@ -17,42 +17,57 @@
   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";>
+<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";>
 
-    <modelVersion>4.0.0</modelVersion>
+  <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.apache.camel</groupId>
-        <artifactId>camel-parent</artifactId>
-        <version>2.9-SNAPSHOT</version>
-        <relativePath>../../parent</relativePath>
-    </parent>
-
-    <artifactId>camel-itest-standalone</artifactId>
-    <name>Camel :: Integration Tests :: Standalone</name>
-    <description>Standalone Camel test</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-parent</artifactId>
+    <version>2.9-SNAPSHOT</version>
+    <relativePath>../../parent</relativePath>
+  </parent>
+
+  <artifactId>camel-itest-standalone</artifactId>
+  <name>Camel :: Integration Tests :: Standalone</name>
+  <description>Standalone Camel test</description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- to allow Spring annotations (jmx) to be tested -->
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+      <optional>true</optional>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-aop</artifactId>
+      <optional>true</optional>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
 
 </project>


Reply via email to