Thx.

Is the endpoint created every time we call the method asyncRequestBody() or
only the first time and next it is found from a cache ?


By the way, CXF/jetty does not like async :

17:35:43,635 | WARN  | 8...@qtp-5791379-0 | PhaseInterceptorChain            |
.cxf.phase.PhaseInterceptorChain  362 | Exception in handleFault on
interceptor
org.apache.cxf.binding.xml.interceptor.xmlfaultoutintercep...@4d8db0
org.apache.cxf.interceptor.Fault
    at
org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:155)
    at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:121)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:130)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:82)
    at
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
    at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
    at
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
    at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
    at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:109)
    at
org.apache.camel.component.cxf.cxfbean.CxfBeanDestination.process(CxfBeanDestination.java:85)
    at
org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:95)
    at
org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:65)
    at
org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:97)
    at
org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:94)
    at
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:146)
    at
org.apache.camel.processor.SendProcessor.doProcess(SendProcessor.java:94)
    at
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:82)
    at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
    at
org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53)
    at
org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82)
    at
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:162)
    at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
    at
org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:223)
    at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:153)
    at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91)
    at
org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49)
    at
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:206)
    at
org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:54)
    at
org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48)
    at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
    at
org.apache.camel.component.http.CamelServlet.service(CamelServlet.java:53)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
    at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
    at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:389)
    at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534)
    at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)
Caused by: java.lang.NullPointerException
    at
org.apache.camel.example.reportincident.restful.ReportIncidentService.getIncidents2(ReportIncidentService.java:74)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at
org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
    at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
    ... 46 more

    @GET
    @Path("/incidents2/")
    public Incidents getIncidents2() {

        Incidents l = new Incidents();

        // Call the distant service to get result
        Future future = producer.asyncRequestBody("jms:queue:inout", "GET");
/// LINE 74

        // Check if we receive a feedback within 10 seconds
           List<Incident> i;
        try {
            i = producer.extractFutureBody(future, 10000,
TimeUnit.MILLISECONDS, List.class);
        } catch (TimeoutException e) {
            return null;
        }

        l.setIncidents(i);
        return l;

    }


Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com
twitter : http://twitter.com/cmoulliard
Linkedlin : http://www.linkedin.com/in/charlesmoulliard

Apache Camel Group :
http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm


On Thu, Dec 10, 2009 at 5:34 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:

> On Thu, Dec 10, 2009 at 5:30 PM, Charles Moulliard <cmoulli...@gmail.com>
> wrote:
> > Awesome this new feature of Producer.
> >
> > I presume that I must use future.get(timeout) //
> >
> http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html#get%28long,%20java.util.concurrent.TimeUnit%29
> >
> > to check if an answer has been received within the period defined.
> >
>
> Yes exactly.
>
> Beware I think it throws an exception for timeout so you may need try
> .. catch around it. And if the task failed the get() will throw an
> ExecutionException with the cause wrapped. You can read all about it
> in the javadocs for this Future API stuff.
>
>
>
> Its only the consumer who have a timeout directly in Camel.
> As its the Polling Consumer EIP
> http://camel.apache.org/polling-consumer.html
>
> >
> > Charles Moulliard
> > Senior Enterprise Architect
> > Apache Camel Committer
> >
> > *****************************
> > blog : http://cmoulliard.blogspot.com
> > twitter : http://twitter.com/cmoulliard
> > Linkedlin : http://www.linkedin.com/in/charlesmoulliard
> >
> > Apache Camel Group :
> > http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
> >
> >
> > On Thu, Dec 10, 2009 at 5:07 PM, Claus Ibsen <claus.ib...@gmail.com>
> wrote:
> >
> >> On Thu, Dec 10, 2009 at 4:55 PM, Charles Moulliard <
> cmoulli...@gmail.com>
> >> wrote:
> >> > If inside a camel bean we use a Producer to get the answer from a
> distant
> >> > service which is available from a queue, can we define the timeout
> that
> >> our
> >> > service must wait before to return an answer ?
> >> >
> >>
> >> If you use a producer then you are in the mercy whether that component
> >> offers some timeout.
> >> eg. http based often offer timeout configs.
> >>
> >> However with Camel you can use the asyncRequestBody and then use the
> >> Future API from JDK where you have timeout support.
> >>
> >> See more here
> >> http://camel.apache.org/async
> >>
> >>
> >> > ex :
> >> >
> >> >    @EndpointInject(uri="jms:queue:inout")
> >> >    ProducerTemplate producer;
> >> >
> >> >   public Incidents getIncidents() {
> >> >
> >> >        Incidents l = new Incidents();
> >> >
> >> >        // Call the distant service (= DAO Service) to get result
> >> >        List<Incident> i = (List<Incident>) producer.requestBody(null);
> //
> >> > How CAN I define a timeout here (if possible) ?
> >> >        l.setIncidents(i);
> >> >
> >> >        return l;
> >> >    }
> >> >
> >> >
> >> >        <camel:route>
> >> >            <camel:from uri="jetty:
> >> > http://localhost:8181?matchOnUriPrefix=true"; />
> >> >            <camel:to uri="cxfbean:reportIncidentServiceBean"/>
> >> >        </camel:route>
> >> >
> >> >        <camel:route>
> >> >            <camel:from uri="jms:queue:inout" />
> >> >            <camel:bean ref="reportIncidentDAOService"
> >> method="getReports"/>
> >> >        </camel:route>
> >> >
> >> > Regards,
> >> >
> >> > Charles Moulliard
> >> > Senior Enterprise Architect
> >> > Apache Camel Committer
> >> >
> >> > *****************************
> >> > blog : http://cmoulliard.blogspot.com
> >> > twitter : http://twitter.com/cmoulliard
> >> > Linkedlin : http://www.linkedin.com/in/charlesmoulliard
> >> >
> >> > Apache Camel Group :
> >> > http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
> >> >
> >>
> >>
> >>
> >> --
> >> Claus Ibsen
> >> Apache Camel Committer
> >>
> >> Author of Camel in Action: http://www.manning.com/ibsen/
> >> Open Source Integration: http://fusesource.com
> >> Blog: http://davsclaus.blogspot.com/
> >> Twitter: http://twitter.com/davsclaus
> >>
> >
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>

Reply via email to