You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/04/15 13:36:25 UTC

svn commit: r934375 - in /camel/trunk/components/camel-spring/src: main/java/org/apache/camel/spring/ main/java/org/apache/camel/spring/remoting/ test/java/org/apache/camel/spring/config/

Author: davsclaus
Date: Thu Apr 15 11:36:25 2010
New Revision: 934375

URL: http://svn.apache.org/viewvc?rev=934375&view=rev
Log:
CAMEL-2649: FactoryBean for ProducerTemplate and ConsumerTemplate should return singleton instances.

Modified:
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelConsumerTemplateFactoryBean.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelProducerTemplateFactoryBean.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ConsumerTemplateAlreadyExistTest.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ProducerTemplateAlreadyExistTest.java

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelConsumerTemplateFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelConsumerTemplateFactoryBean.java?rev=934375&r1=934374&r2=934375&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelConsumerTemplateFactoryBean.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelConsumerTemplateFactoryBean.java Thu Apr 15 11:36:25 2010
@@ -28,7 +28,9 @@ import org.apache.camel.ConsumerTemplate
 import org.apache.camel.impl.DefaultConsumerTemplate;
 import org.apache.camel.model.IdentifiedType;
 import org.apache.camel.spring.util.CamelContextResolverHelper;
+import org.apache.camel.util.ServiceHelper;
 import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.context.ApplicationContext;
@@ -42,7 +44,9 @@ import org.springframework.context.Appli
  */
 @XmlRootElement(name = "consumerTemplate")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class CamelConsumerTemplateFactoryBean extends IdentifiedType implements FactoryBean, InitializingBean, CamelContextAware, ApplicationContextAware {
+public class CamelConsumerTemplateFactoryBean extends IdentifiedType implements FactoryBean, InitializingBean, DisposableBean, CamelContextAware, ApplicationContextAware {
+    @XmlTransient
+    private ConsumerTemplate template;
     @XmlAttribute
     private String camelContextId;
     @XmlTransient
@@ -62,16 +66,16 @@ public class CamelConsumerTemplateFactor
     }
 
     public Object getObject() throws Exception {
-        ConsumerTemplate answer = new DefaultConsumerTemplate(camelContext);
+        template = new DefaultConsumerTemplate(camelContext);
 
         // set custom cache size if provided
         if (maximumCacheSize != null) {
-            answer.setMaximumCacheSize(maximumCacheSize);
+            template.setMaximumCacheSize(maximumCacheSize);
         }
 
         // must start it so its ready to use
-        answer.start();
-        return answer;
+        ServiceHelper.startService(template);
+        return template;
     }
 
     public Class getObjectType() {
@@ -79,7 +83,11 @@ public class CamelConsumerTemplateFactor
     }
 
     public boolean isSingleton() {
-        return false;
+        return true;
+    }
+
+    public void destroy() throws Exception {
+        ServiceHelper.stopService(template);
     }
 
     // Properties

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelProducerTemplateFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelProducerTemplateFactoryBean.java?rev=934375&r1=934374&r2=934375&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelProducerTemplateFactoryBean.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelProducerTemplateFactoryBean.java Thu Apr 15 11:36:25 2010
@@ -29,7 +29,9 @@ import org.apache.camel.ProducerTemplate
 import org.apache.camel.impl.DefaultProducerTemplate;
 import org.apache.camel.model.IdentifiedType;
 import org.apache.camel.spring.util.CamelContextResolverHelper;
+import org.apache.camel.util.ServiceHelper;
 import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.context.ApplicationContext;
@@ -43,7 +45,9 @@ import org.springframework.context.Appli
  */
 @XmlRootElement(name = "template")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class CamelProducerTemplateFactoryBean extends IdentifiedType implements FactoryBean, InitializingBean, CamelContextAware, ApplicationContextAware {
+public class CamelProducerTemplateFactoryBean extends IdentifiedType implements FactoryBean, InitializingBean, DisposableBean, CamelContextAware, ApplicationContextAware {
+    @XmlTransient
+    private ProducerTemplate template;
     @XmlAttribute(required = false)
     private String defaultEndpoint;
     @XmlAttribute
@@ -65,28 +69,26 @@ public class CamelProducerTemplateFactor
     }
 
     public Object getObject() throws Exception {
-        ProducerTemplate answer;
-
         CamelContext context = getCamelContext();
         if (defaultEndpoint != null) {
             Endpoint endpoint = context.getEndpoint(defaultEndpoint);
             if (endpoint == null) {
                 throw new IllegalArgumentException("No endpoint found for URI: " + defaultEndpoint);
             } else {
-                answer = new DefaultProducerTemplate(context, endpoint);
+                template = new DefaultProducerTemplate(context, endpoint);
             }
         } else {
-            answer = new DefaultProducerTemplate(context);
+            template = new DefaultProducerTemplate(context);
         }
 
         // set custom cache size if provided
         if (maximumCacheSize != null) {
-            answer.setMaximumCacheSize(maximumCacheSize);
+            template.setMaximumCacheSize(maximumCacheSize);
         }
 
         // must start it so its ready to use
-        answer.start();
-        return answer;
+        ServiceHelper.startService(template);
+        return template;
     }
 
     public Class getObjectType() {
@@ -94,7 +96,11 @@ public class CamelProducerTemplateFactor
     }
 
     public boolean isSingleton() {
-        return false;
+        return true;
+    }
+
+    public void destroy() throws Exception {
+        ServiceHelper.stopService(template);
     }
 
     // Properties
@@ -129,4 +135,5 @@ public class CamelProducerTemplateFactor
     public void setMaximumCacheSize(Integer maximumCacheSize) {
         this.maximumCacheSize = maximumCacheSize;
     }
+
 }

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java?rev=934375&r1=934374&r2=934375&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java Thu Apr 15 11:36:25 2010
@@ -23,6 +23,7 @@ import org.apache.camel.FailedToCreatePr
 import org.apache.camel.Producer;
 import org.apache.camel.component.bean.ProxyHelper;
 import org.apache.camel.spring.util.CamelContextResolverHelper;
+import org.apache.camel.util.ServiceHelper;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.FactoryBean;
@@ -71,18 +72,16 @@ public class CamelProxyFactoryBean exten
         }
 
         try {
-            this.producer = endpoint.createProducer();
-            this.producer.start();
-            this.serviceProxy = ProxyHelper.createProxy(endpoint, producer, getServiceInterface());
+            producer = endpoint.createProducer();
+            ServiceHelper.startService(producer);
+            serviceProxy = ProxyHelper.createProxy(endpoint, producer, getServiceInterface());
         } catch (Exception e) {
             throw new FailedToCreateProducerException(endpoint, e);
         }
     }
 
     public void destroy() throws Exception {
-        this.producer.stop();
-        this.producer = null;
-        this.serviceProxy = null;
+        ServiceHelper.stopService(producer);
     }
 
     public Class getServiceInterface() {

Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ConsumerTemplateAlreadyExistTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ConsumerTemplateAlreadyExistTest.java?rev=934375&r1=934374&r2=934375&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ConsumerTemplateAlreadyExistTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ConsumerTemplateAlreadyExistTest.java Thu Apr 15 11:36:25 2010
@@ -43,4 +43,15 @@ public class ConsumerTemplateAlreadyExis
         ConsumerTemplate lookup2 = context.getRegistry().lookup("consumerTemplate", ConsumerTemplate.class);
         assertNull("Should not be able to lookup consumer template", lookup2);
     }
+
+    public void testShouldBeSingleton() {
+        ConsumerTemplate lookup = context.getRegistry().lookup("myConsumerTemplate", ConsumerTemplate.class);
+        assertNotNull("Should lookup producer template", lookup);
+
+        ConsumerTemplate lookup2 = context.getRegistry().lookup("myConsumerTemplate", ConsumerTemplate.class);
+        assertNotNull("Should lookup producer template", lookup);
+
+        assertSame("Should be same instances (singleton)", lookup, lookup2);
+    }
+
 }
\ No newline at end of file

Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ProducerTemplateAlreadyExistTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ProducerTemplateAlreadyExistTest.java?rev=934375&r1=934374&r2=934375&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ProducerTemplateAlreadyExistTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ProducerTemplateAlreadyExistTest.java Thu Apr 15 11:36:25 2010
@@ -43,4 +43,14 @@ public class ProducerTemplateAlreadyExis
         ProducerTemplate lookup2 = context.getRegistry().lookup("template", ProducerTemplate.class);
         assertNull("Should not be able to lookup producer template", lookup2);
     }
+
+    public void testShouldBeSingleton() {
+        ProducerTemplate lookup = context.getRegistry().lookup("myTemplate", ProducerTemplate.class);
+        assertNotNull("Should lookup producer template", lookup);
+
+        ProducerTemplate lookup2 = context.getRegistry().lookup("myTemplate", ProducerTemplate.class);
+        assertNotNull("Should lookup producer template", lookup);
+
+        assertSame("Should be same instances (singleton)", lookup, lookup2);
+    }
 }
\ No newline at end of file