Do a bit of search in the camel documentation and you will find http://camel.apache.org/polling-consumer.html
On Mon, Sep 21, 2009 at 4:22 PM, Charles Moulliard <[email protected]> wrote: > Concerning the point 2) > > it does not work too with this syntax : > > �...@endpointinject() > private ConsumerTemplate consumer; > > �...@endpointinject(name = "queueReportingEndpoint") > private Endpoint endpoint; > > > the following error is generated : > > 16:16:33,796 | ERROR | xtenderThread-56 | ContextLoaderListener > | BundleApplicationContextListener 50 | Application context > refresh failed > (OsgiBundleXmlApplicationContext(bundle=com.xpectis.x3s.x3s-core, > config=osgibundle:/META-INF/spring/*.xml)) > org.springframework.beans.factory.BeanCreationException: Error > creating bean with name 'reportingConsumer' defined in URL > [bundle://208.0:0/META-INF/spring/core-reporting.xml]: Initialization > of bean failed; nested exception is > java.lang.IllegalArgumentException: registry entry called consumer of > type org.apache.camel.Endpoint must be specified > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) > at java.security.AccessController.doPrivileged(Native Method) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) > at > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) > at > org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) > at > org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:69) > at > org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355) > at > org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) > at > org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) > at > org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:136) > at java.lang.Thread.run(Thread.java:595) > Caused by: java.lang.IllegalArgumentException: registry entry called > consumer of type org.apache.camel.Endpoint must be specified > at org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:242) > at > org.apache.camel.util.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:168) > at > org.apache.camel.util.CamelContextHelper.getEndpointInjection(CamelContextHelper.java:213) > at > org.apache.camel.impl.CamelPostProcessorHelper.getEndpointInjection(CamelPostProcessorHelper.java:121) > at > org.apache.camel.impl.CamelPostProcessorHelper.getInjectionValue(CamelPostProcessorHelper.java:131) > at > org.apache.camel.spring.CamelBeanPostProcessor.injectField(CamelBeanPostProcessor.java:215) > at > org.apache.camel.spring.CamelBeanPostProcessor$2.doWith(CamelBeanPostProcessor.java:203) > at > org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:523) > at > org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:500) > at > org.apache.camel.spring.CamelBeanPostProcessor.injectFields(CamelBeanPostProcessor.java:199) > at > org.apache.camel.spring.CamelBeanPostProcessor.postProcessBeforeInitialization(CamelBeanPostProcessor.java:91) > > -2€/paypall account > > > Charles Moulliard > Senior Enterprise Architect > Apache Camel Committer > > ***************************** > blog : http://cmoulliard.blogspot.com > > > > On Mon, Sep 21, 2009 at 3:54 PM, Claus Ibsen <[email protected]> wrote: >> On Mon, Sep 21, 2009 at 3:46 PM, Charles Moulliard <[email protected]> >> wrote: >>> It works now except that I have the following error (btw, the objects >>> posted in the JMS queue are serializable) . >>> >>> CaughtExceptionType:java.io.NotSerializableException, >>> CaughtExceptionMessage:org.apache.camel.component.jms.JmsQueueEndpoint, >>> StackTrace:java.io.NotSerializableException: >>> org.apache.camel.component.jms.JmsQueueEndpoint >>> at >>> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081) >>> at >>> java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1251) >>> at >>> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075) >>> at >>> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) >>> at >>> org.apache.camel.component.bean.BeanInvocation.writeExternal(BeanInvocation.java:104) >>> at >>> java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1310) >>> at >>> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1288) >>> at >>> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079) >>> at >>> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) >>> at >>> org.apache.activemq.command.ActiveMQObjectMessage.storeContent(ActiveMQObjectMessage.java:98) >>> >>> Why do we have to inject two times the reference of the uri, this is >>> not so very logic ? >> >> You do not need to. >> >>> >>> �...@endpointinject(name = "queueReportingEndpoint") >>> private ConsumerTemplate consumer; >>> >>> �...@endpointinject(name = "queueReportingEndpoint") >>> private Endpoint endpoint; >>> >> >> You can do this in a single line >> >> �...@endpointinject(name = "queueReportingEndpoint") >> private ConsumerTemplate consumer; >> >> And then just as it then knows which endpoint to consume from as you >> specified it in the annotation >> Exchange e = consumer.receive(); >> >> 2) >> But if you want to have Endpoint and ConsumerTemplate then you can do >> >> �...@endpointinject() >> private ConsumerTemplate consumer; >> >> �...@endpointinject(name = "queueReportingEndpoint") >> private Endpoint endpoint; >> >> But then you need to tell the consumer template which endpoint to use >> Exchange e = consumer.receive(endpoint); >> >> >> Deposit 5$ to my pay pall account for support :) >> >> >> >>> Regards, >>> >>> Charles Moulliard >>> Senior Enterprise Architect >>> Apache Camel Committer >>> >>> ***************************** >>> blog : http://cmoulliard.blogspot.com >>> >>> >>> >>> On Mon, Sep 21, 2009 at 3:14 PM, Claus Ibsen <[email protected]> wrote: >>>> Charles you do post your problems to soon. >>>> >>>> The NPE is of course because ConsumerTemplate is never initialized. >>>> >>>> Just add @EndpointInject to it as well >>>> >>>> @EndpointInject >>>> private ConsumerTemplate consumer; >>>> >>>> >>>> >>>> On Mon, Sep 21, 2009 at 3:06 PM, Charles Moulliard <[email protected]> >>>> wrote: >>>>> There is something strange. I receive a NPE exception at the line >>>>> where I create an exchange from consumer : >>>>> >>>>> �...@endpointinject(name = "queueReportingEndpoint") >>>>> private Endpoint endpoint; >>>>> >>>>> private ConsumerTemplate consumer; >>>>> >>>>> public List<Map<String, Object>> collectMessages() { >>>>> >>>>> Log.info("Endpoint : " + endpoint.getEndpointUri()); >>>>> >>>>> Exchange exch = consumer.receive(endpoint); >>>>> >>>>> If I call directly consumer.receiveBody(endpoint, List.class); I have >>>>> the same error. I tough that the problem come from the endpoint >>>>> injection, but I have also a NPE if I use the uri of the endpoint in >>>>> the receiveBody method >>>>> >>>>> Here is the trace : >>>>> >>>>> Time=Mon Sep 21 15:00:00 CEST 2009, calendar=null, >>>>> previousFireTime=Mon Sep 21 14:58:00 CEST 2009, >>>>> CamelBeanMethodName=null}, BodyType:org.quartz.JobDetail, >>>>> Body:JobDetail >>>>> 'DEFAULT.quartz://x3sReporting/clientError?cron=0+0%2F2+9-18+%3F+*+MON-FRI': >>>>> jobClass: 'org.apache.camel.component.quartz.CamelJob isStateful: >>>>> false isVolatile: false isDurable: false requestsRecovers: false >>>>> 15:00:00,000 | INFO | heduler_Worker-2 | x3s >>>>> | rg.apache.camel.processor.Logger 88 | Exchange[ >>>>> , BodyType:org.quartz.JobDetail >>>>> , Body:JobDetail >>>>> 'DEFAULT.quartz://x3sReporting/clientError?cron=0+0%2F2+9-18+%3F+*+MON-FRI': >>>>> jobClass: 'org.apache.camel.component.quartz.CamelJob isStateful: >>>>> false isVolatile: false isDurable: false requestsRecovers: false >>>>> , CaughtExceptionType:java.lang.NullPointerException, >>>>> CaughtExceptionMessage:null, StackTrace:java.lang.NullPointerException >>>>> at >>>>> com.xpectis.x3s.core.util.ReportingConsumer.collectMessages(ReportingConsumer.java:27) >>>>> >>>>> >>>>> Charles Moulliard >>>>> Senior Enterprise Architect >>>>> Apache Camel Committer >>>>> >>>>> ***************************** >>>>> blog : http://cmoulliard.blogspot.com >>>>> >>>>> >>>>> >>>>> On Mon, Sep 21, 2009 at 2:12 PM, Claus Ibsen <[email protected]> >>>>> wrote: >>>>>> On Mon, Sep 21, 2009 at 2:05 PM, Charles Moulliard >>>>>> <[email protected]> wrote: >>>>>>> @EndpointInject(uri="") only accepts as parameter an uri / name or >>>>>>> context but not a reference to a spring bean >>>>>>> >>>>>> >>>>>> Its the name attribute that is the ref, maybe we should rename it :) >>>>>> >>>>>> >>>>>> >>>>>>> Charles Moulliard >>>>>>> Senior Enterprise Architect >>>>>>> Apache Camel Committer >>>>>>> >>>>>>> ***************************** >>>>>>> blog : http://cmoulliard.blogspot.com >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, Sep 21, 2009 at 1:59 PM, Claus Ibsen <[email protected]> >>>>>>> wrote: >>>>>>>> On Mon, Sep 21, 2009 at 1:55 PM, Charles Moulliard >>>>>>>> <[email protected]> wrote: >>>>>>>>> Sorry for my mistake. >>>>>>>>> >>>>>>>>> I have used @consume because it was possible to pass as a parameter >>>>>>>>> the name of the endpoint to consume. Is there a way to do this with a >>>>>>>>> consumer template ? >>>>>>>>> >>>>>>>> >>>>>>>> You can IoC the endpoint in the bean >>>>>>>> >>>>>>>> @EndpointInjected(ref = "foo") >>>>>>>> private Endpoint foo; >>>>>>>> >>>>>>>> but I would assume consumer template also works like producer template >>>>>>>> with IoC >>>>>>>> ( if not we should add it) >>>>>>>> >>>>>>>> @EndpointInjected(ref = "foo") >>>>>>>> private ConsumerTemplate consumer; >>>>>>>> >>>>>>>> >>>>>>>> See more >>>>>>>> http://camel.apache.org/bean-injection.html >>>>>>>> >>>>>>>>> regards, >>>>>>>>> >>>>>>>>> Charles Moulliard >>>>>>>>> Senior Enterprise Architect >>>>>>>>> Apache Camel Committer >>>>>>>>> >>>>>>>>> ***************************** >>>>>>>>> blog : http://cmoulliard.blogspot.com >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Sep 21, 2009 at 1:50 PM, Claus Ibsen <[email protected]> >>>>>>>>> wrote: >>>>>>>>>> On Mon, Sep 21, 2009 at 1:46 PM, Charles Moulliard >>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>> The POJO defined in the following route consumes immediately >>>>>>>>>>> messages >>>>>>>>>>> posted on a queue and in consequence is not triggered by the Quartz >>>>>>>>>>> timer >>>>>>>>>>> >>>>>>>>>>> <camel:from >>>>>>>>>>> uri="quartz://x3sReporting/clientError?cron=0+0/5+9-18+?+*+MON-FRI"/> >>>>>>>>>>> <camel:doTry> >>>>>>>>>>> <camel:bean >>>>>>>>>>> ref="reportingConsumer" method="collectMessages"/> >>>>>>>>>>> ... >>>>>>>>>>> >>>>>>>>>>> public class ReportingConsumer { >>>>>>>>>>> >>>>>>>>>>> �...@consume(ref = "queueReportingEndpoint") // = x3s:report queue >>>>>>>>>>> public List<Map<String, Object>> >>>>>>>>>>> collectMessages(List<Map<String, >>>>>>>>>>> Object>> received) { >>>>>>>>>>> >>>>>>>>>>> List<Map<String, Object>> result = new ArrayList<Map<String, >>>>>>>>>>> Object>>(); >>>>>>>>>>> >>>>>>>>>>> if (received != null) { >>>>>>>>>>> >>>>>>>>>>> Log.info("Received exchange : " + >>>>>>>>>>> received.size()); >>>>>>>>>>> for(Map<String, Object> model : received) { >>>>>>>>>>> >>>>>>>>>>> Log.info("Map received : " + >>>>>>>>>>> model.toString()); >>>>>>>>>>> // Add model received into the >>>>>>>>>>> result output list >>>>>>>>>>> result.add( model ); >>>>>>>>>>> } >>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>> return result; >>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>> Question : How can I avoid that the bean consumes immediately >>>>>>>>>>> messages >>>>>>>>>>> from the queue and wait quartz triggering ? >>>>>>>>>> >>>>>>>>>> You cannot as @Consume(ref = "queueReportingEndpoint") has ABSOLUTELY >>>>>>>>>> nothing to do with quartz. >>>>>>>>>> It creates a new event driven consumer which listen on new messages >>>>>>>>>> arriving on that JMS queue. >>>>>>>>>> >>>>>>>>>> You can remove the @Consume and then let quartz invoke it from the >>>>>>>>>> Camel route. >>>>>>>>>> >>>>>>>>>> And then you can in your bean use a consumer template to read >>>>>>>>>> messages >>>>>>>>>> from the JMS queue. >>>>>>>>>> Now you bean is only invoked when quartz triggers. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Charles Moulliard >>>>>>>>>>> Senior Enterprise Architect >>>>>>>>>>> Apache Camel Committer >>>>>>>>>>> >>>>>>>>>>> ***************************** >>>>>>>>>>> blog : http://cmoulliard.blogspot.com >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Claus Ibsen >>>>>>>>>> Apache Camel Committer >>>>>>>>>> >>>>>>>>>> Open Source Integration: http://fusesource.com >>>>>>>>>> Blog: http://davsclaus.blogspot.com/ >>>>>>>>>> Twitter: http://twitter.com/davsclaus >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Claus Ibsen >>>>>>>> Apache Camel Committer >>>>>>>> >>>>>>>> Open Source Integration: http://fusesource.com >>>>>>>> Blog: http://davsclaus.blogspot.com/ >>>>>>>> Twitter: http://twitter.com/davsclaus >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Claus Ibsen >>>>>> Apache Camel Committer >>>>>> >>>>>> Open Source Integration: http://fusesource.com >>>>>> Blog: http://davsclaus.blogspot.com/ >>>>>> Twitter: http://twitter.com/davsclaus >>>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Claus Ibsen >>>> Apache Camel Committer >>>> >>>> Open Source Integration: http://fusesource.com >>>> Blog: http://davsclaus.blogspot.com/ >>>> Twitter: http://twitter.com/davsclaus >>>> >>> >> >> >> >> -- >> Claus Ibsen >> Apache Camel Committer >> >> Open Source Integration: http://fusesource.com >> Blog: http://davsclaus.blogspot.com/ >> Twitter: http://twitter.com/davsclaus >> > -- Claus Ibsen Apache Camel Committer Open Source Integration: http://fusesource.com Blog: http://davsclaus.blogspot.com/ Twitter: http://twitter.com/davsclaus
