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>