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