camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: My long running bean sending out messages
Date Sat, 07 Apr 2012 09:05:44 GMT
Hi

What version of Camel are you using?

It looks like your bean does not get the @Produce injected from the
route when you do
 .bean(LongRunningBean.class, "startLongOperation")



On Fri, Apr 6, 2012 at 3:04 PM, Borut Bolčina <borut.bolcina@gmail.com> wrote:
> Hello,
>
> I am trying to marry crawler4j with Camel and having some trouble sending
> messages out of my bean. The producer is not instantiated - I get NPE.
>
> My goal is to send each crawled page (html in string variable) to the next
> stage in the route. If I simplify the crawler with a demo bean:
>
> public class LongRunningBean {
>    @Produce(uri = "direct:crawler")
>    protected MyListener producer;
>  List<String> outMessages = Arrays.asList("m1", "m2", "m3");
>  public void startLongOperation() throws InterruptedException {
>
>  for (String message : outMessages) {
>  String response = producer.sendMessage(message); // NPE
>  Thread.sleep(2000);
> }
>  }
> }
>
> and the
>
> public interface MyListener {
> String sendMessage(String message);
> }
>
> and my test route(s):
>
> public class LongRunningBeanTest extends CamelTestSupport {
>
> @Override
>  protected RouteBuilder createRouteBuilder() throws Exception {
>  return new RouteBuilder() {
>  @Override
> public void configure() throws Exception {
> from("direct:start")
>  .bean(LongRunningBean.class, "startLongOperation")
> .to("log:bb.webcraft.crawler?level=DEBUG");
>  from("direct:crawler")
> .to("log:bb.webcraft.crawler?level=DEBUG");
>  }
> };
> }
>
> @Test
> public void testLongRun() throws Exception {
> template.sendBody("direct:start", "myDummyMessage");
>  assert(true);
> }
>  }
>
> I am getting NPE:
>
> [2012/04/06 14:23:26.478] ERROR [o.a.c.p.DefaultErrorHandler:log]: Failed
> delivery for (MessageId: ID-BOBB-50119-1333715006068-0-1 on ExchangeId:
> ID-BOBB-50119-1333715006068-0-2). Exhausted after delivery attempt: 1
> caught: java.lang.NullPointerException
> java.lang.NullPointerException: null
> at
> bb.webcraft.crawler.LongRunningBean.startLongOperation(LongRunningBean.java:19)
> ~[test-classes/:na]
>
>
> My goal is not to wait until the long running bean (crawler)
> ends processing and then route an enormous number of objects in one
> Exchange message, but send each crawled page's content to the next stage in
> the route as soon as it is processed.
>
> I saw only examples with activemq as producer's uri. Is this the trick?
>
> And one more thing - I don't need a return message as in:
>
> String response = producer.sendMessage(message);
>
> How to use the @InOnly or something else?
>
> Thanks,
> Borut



-- 
Claus Ibsen
-----------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Mime
View raw message