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>

Reply via email to