activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cshan...@apache.org
Subject [2/2] activemq git commit: https://issues.apache.org/jira/browse/AMQ-6301
Date Tue, 12 Jul 2016 16:39:23 GMT
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/9da72840
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/9da72840
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/9da72840

Branch: refs/heads/activemq-5.13.x
Commit: 9da728407bb07ed9ad35ea12c3d8180382b0cc51
Parents: 982f739
Author: Christopher L. Shannon (cshannon) <christopher.l.shannon@gmail.com>
Authored: Fri Jul 1 16:21:19 2016 +0000
Committer: Christopher L. Shannon (cshannon) <christopher.l.shannon@gmail.com>
Committed: Tue Jul 12 12:31:44 2016 -0400

----------------------------------------------------------------------
 activemq-osgi/pom.xml                           |  4 +-
 .../activemq/osgi/ActiveMQServiceFactory.java   | 53 ++++++++++++++++----
 2 files changed, 46 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/9da72840/activemq-osgi/pom.xml
----------------------------------------------------------------------
diff --git a/activemq-osgi/pom.xml b/activemq-osgi/pom.xml
index 6389022..07928f9 100644
--- a/activemq-osgi/pom.xml
+++ b/activemq-osgi/pom.xml
@@ -64,7 +64,9 @@
       org.apache.xbean.spring*;resolution:=optional;version="[3.13,5)",
       org.apache.xbean*;version="[3.13,5)",
       javax.annotation*,
-      javax.jms*,
+      !com.thoughtworks.qdox*,
+      org.apache.commons.logging;version="[1.2,2)";resolution:=optional,
+      javax.jms*;version="[1.1,3)",
       javax.management*,
       javax.transaction*,
       javax.naming*;resolution:=optional,

http://git-wip-us.apache.org/repos/asf/activemq/blob/9da72840/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);


Mime
View raw message