https://issues.apache.org/jira/browse/AMQ-6301
Updating ActiveMQServiceFactory to avoid using Spring DM directly and instead use the Camel factory bean if it exists Reverting back to Camel 2.16.3 until Spring DM is removed and Spring 4 can be used Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/6c2ce67f Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/6c2ce67f Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/6c2ce67f Branch: refs/heads/master Commit: 6c2ce67ffbde081f1db75002c8b41c3c7b7bb166 Parents: a2205f6 Author: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com> Authored: Fri Jul 1 16:21:19 2016 +0000 Committer: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com> Committed: Tue Jul 12 12:27:30 2016 -0400 ---------------------------------------------------------------------- .../itest/ActiveMQBrokerNdCamelFeatureTest.java | 3 +- activemq-osgi/pom.xml | 2 + .../activemq/osgi/ActiveMQServiceFactory.java | 53 ++++++++++++++++---- pom.xml | 2 +- 4 files changed, 47 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/6c2ce67f/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java ---------------------------------------------------------------------- diff --git a/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java b/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java index dc2c1cc..ce32dfc 100644 --- a/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java +++ b/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java @@ -35,8 +35,7 @@ import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfi import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features; import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.replaceConfigurationFile; -//@RunWith(PaxExam.class) -@Ignore +@RunWith(PaxExam.class) public class ActiveMQBrokerNdCamelFeatureTest extends AbstractJmsFeatureTest { @Configuration http://git-wip-us.apache.org/repos/asf/activemq/blob/6c2ce67f/activemq-osgi/pom.xml ---------------------------------------------------------------------- diff --git a/activemq-osgi/pom.xml b/activemq-osgi/pom.xml index 2802d1b..abf4bb0 100644 --- a/activemq-osgi/pom.xml +++ b/activemq-osgi/pom.xml @@ -64,6 +64,8 @@ org.apache.xbean.spring*;resolution:=optional;version="[3.13,5)", org.apache.xbean*;version="[3.13,5)", javax.annotation*, + !com.thoughtworks.qdox*, + org.apache.commons.logging;version="[1.2,2)";resolution:=optional, javax.jms*;version="[1.1,3)", javax.management*, javax.transaction*, http://git-wip-us.apache.org/repos/asf/activemq/blob/6c2ce67f/activemq-osgi/src/main/java/org/apache/activemq/osgi/ActiveMQServiceFactory.java ---------------------------------------------------------------------- diff --git a/activemq-osgi/src/main/java/org/apache/activemq/osgi/ActiveMQServiceFactory.java b/activemq-osgi/src/main/java/org/apache/activemq/osgi/ActiveMQServiceFactory.java index 5e49dfa..7c8d177 100644 --- a/activemq-osgi/src/main/java/org/apache/activemq/osgi/ActiveMQServiceFactory.java +++ b/activemq-osgi/src/main/java/org/apache/activemq/osgi/ActiveMQServiceFactory.java @@ -26,15 +26,19 @@ import java.util.Properties; import org.apache.activemq.broker.BrokerService; import org.apache.activemq.spring.SpringBrokerContext; import org.apache.activemq.spring.Utils; +import org.apache.camel.osgi.CamelContextFactoryBean; import org.osgi.framework.BundleContext; import org.osgi.service.cm.ConfigurationException; import org.osgi.service.cm.ManagedServiceFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; -import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; +import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.Resource; -import org.springframework.osgi.context.support.OsgiBundleXmlApplicationContext; public class ActiveMQServiceFactory implements ManagedServiceFactory { @@ -74,14 +78,34 @@ public class ActiveMQServiceFactory implements ManagedServiceFactory { Thread.currentThread().setContextClassLoader(BrokerService.class.getClassLoader()); Resource resource = Utils.resourceFromString(config); - // when camel is embedded it needs a bundle context - OsgiBundleXmlApplicationContext ctx = new OsgiBundleXmlApplicationContext(new String[]{resource.getURL().toExternalForm()}) { - @Override - protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) { - reader.setValidating(false); - } - }; - ctx.setBundleContext(bundleContext); + ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( + new String[]{resource.getURL().toExternalForm()}, false); + + if (isCamelContextFactoryBeanExist()) { + + ctx.addBeanFactoryPostProcessor(new BeanFactoryPostProcessor() { + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + + beanFactory.addBeanPostProcessor(new BeanPostProcessor() { + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof CamelContextFactoryBean) { + ((CamelContextFactoryBean) bean).setBundleContext(bundleContext); + } + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + return bean; + } + }); + } + }); + } // Handle properties in configuration PropertyPlaceholderConfigurer configurator = new PropertyPlaceholderConfigurer(); @@ -121,6 +145,15 @@ public class ActiveMQServiceFactory implements ManagedServiceFactory { } } + private boolean isCamelContextFactoryBeanExist() { + try { + Class.forName("org.apache.camel.osgi.CamelContextFactoryBean"); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + @Override synchronized public void deleted(String pid) { BrokerService broker = brokers.get(pid); http://git-wip-us.apache.org/repos/asf/activemq/blob/6c2ce67f/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 0dae6c0..04f5991 100755 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,7 @@ <aries-version>1.1.0</aries-version> <aries-transaction-version>1.1.1</aries-transaction-version> <axion-version>1.0-M3-dev</axion-version> - <camel-version>2.17.2</camel-version> + <camel-version>2.16.3</camel-version> <camel-version-range>[2.16,3)</camel-version-range> <cglib-version>2.2</cglib-version> <commons-beanutils-version>1.9.2</commons-beanutils-version>