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


Reply via email to