You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Mark Borner <ma...@zurich.com.au> on 2011/01/24 05:25:39 UTC

Delay() causes unexpected results

Hi all:

I have a DSL that works as expected, but when I add delay()'s, it doesn't. 
 Is this a bug or do I not understand the delay() function?

Test Class:

public class ChoiceTesting extends CamelTestSupport {

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:start")
                    .log("Starting testing")
                    .multicast().stopOnException()
                        .pipeline()
                            .log("In the beginning!  Body=${body}")
                            .to("direct:dummy")
                            .choice()
                                .when(header("KEY").isNotEqualTo("VALUE"))
                                    .log("choice 1")
                                    .wireTap("direct:dummy")
                                    //.delay(500)
                                    .choice()
 .when(header("KEY").isNotEqualTo("VALUE"))
                                            .log("choice 2")
                                            .to("direct:dummy")
                                            //.delay(500)
                                            .choice()
 .when(header("KEY").isEqualTo("VALUE"))
                                                    .log("choice 3")
                                                    .throwException(new 
RuntimeException("Some Error"))
                                            .end()
                                    .end()
                            .end()
                        .end()
                        .to("direct:middle")
                        .pipeline()
                            .log("In the end!  Body=${body}")
                        .end();

                from("direct:middle")
                    .log("In the middle!  Body=${body}");

                from("direct:dummy")
                    .setBody().constant("DUMMY");
            }
        };
    }

    @Test
    public void run() {
        template.sendBody("direct:start", "X");
    }
}

Produces the expected output of:

2011-01-24 15:16:42,891 INFO  route1 - Starting testing
2011-01-24 15:16:42,891 INFO  route1 - In the beginning!  Body=X
2011-01-24 15:16:42,891 INFO  route1 - choice 1
2011-01-24 15:16:42,891 INFO  route1 - choice 2
2011-01-24 15:16:42,891 INFO  route2 - In the middle!  Body=X
2011-01-24 15:16:42,891 INFO  route1 - In the end!  Body=X

But when I uncomment the delay() calls, the output changes to:

2011-01-24 15:23:55,477 INFO  route1 - Starting testing
2011-01-24 15:23:55,477 INFO  route1 - In the beginning!  Body=X
2011-01-24 15:23:55,477 INFO  route1 - choice 1
2011-01-24 15:23:55,977 INFO  route1 - choice 2
2011-01-24 15:23:56,477 INFO  route2 - In the middle!  Body=DUMMY
2011-01-24 15:23:56,477 INFO  route1 - In the end!  Body=DUMMY

I'm using Camel 2.5.0.

Thanks in advance,
Mark

Mark Borner
Java Developer - ZStream Xpress

----
This email is intended for the named recipient only. It may contain 
information which is confidential, commercially sensitive, or 
copyright. If you are not the intended recipient you must not 
reproduce or distribute any part of the email, disclose its contents, 
or take any action in reliance. If you have received this email in 
error, please contact the sender and delete the message. It is your 
responsibility to scan this email and any attachments for viruses and 
other defects. To the extent permitted by law, Zurich and its 
associates will not be liable for any loss or damage arising in any 
way from this communication including any file attachments. We may 
monitor email you send to us, either as a reply to this email or any 
email you send to us, to confirm our systems are protected and for 
compliance with company policies. Although we take reasonable 
precautions to protect the confidentiality of our email systems, we 
do not warrant the confidentiality or security of email or 
attachments we receive.

Re: Delay() causes unexpected results

Posted by "Willem.Jiang" <wi...@gmail.com>.
Please call the end() after you call the delay() function, then you will get
same result as not using delay() function.
As you know delay is a delegate processor,  end() will tell him there is no
other processor it should be delegated to call. 

Willem


marbor wrote:
> 
> Hi all:
> 
> I have a DSL that works as expected, but when I add delay()'s, it doesn't. 
>  Is this a bug or do I not understand the delay() function?
> 
> Test Class:
> 
> public class ChoiceTesting extends CamelTestSupport {
> 
>     @Override
>     protected RouteBuilder createRouteBuilder() throws Exception {
>         return new RouteBuilder() {
>             @Override
>             public void configure() throws Exception {
>                 from("direct:start")
>                     .log("Starting testing")
>                     .multicast().stopOnException()
>                         .pipeline()
>                             .log("In the beginning!  Body=${body}")
>                             .to("direct:dummy")
>                             .choice()
>                                 .when(header("KEY").isNotEqualTo("VALUE"))
>                                     .log("choice 1")
>                                     .wireTap("direct:dummy")
>                                     //.delay(500)
>                                     .choice()
>  .when(header("KEY").isNotEqualTo("VALUE"))
>                                             .log("choice 2")
>                                             .to("direct:dummy")
>                                             //.delay(500)
>                                             .choice()
>  .when(header("KEY").isEqualTo("VALUE"))
>                                                     .log("choice 3")
>                                                     .throwException(new 
> RuntimeException("Some Error"))
>                                             .end()
>                                     .end()
>                             .end()
>                         .end()
>                         .to("direct:middle")
>                         .pipeline()
>                             .log("In the end!  Body=${body}")
>                         .end();
> 
>                 from("direct:middle")
>                     .log("In the middle!  Body=${body}");
> 
>                 from("direct:dummy")
>                     .setBody().constant("DUMMY");
>             }
>         };
>     }
> 
>     @Test
>     public void run() {
>         template.sendBody("direct:start", "X");
>     }
> }
> 
> Produces the expected output of:
> 
> 2011-01-24 15:16:42,891 INFO  route1 - Starting testing
> 2011-01-24 15:16:42,891 INFO  route1 - In the beginning!  Body=X
> 2011-01-24 15:16:42,891 INFO  route1 - choice 1
> 2011-01-24 15:16:42,891 INFO  route1 - choice 2
> 2011-01-24 15:16:42,891 INFO  route2 - In the middle!  Body=X
> 2011-01-24 15:16:42,891 INFO  route1 - In the end!  Body=X
> 
> But when I uncomment the delay() calls, the output changes to:
> 
> 2011-01-24 15:23:55,477 INFO  route1 - Starting testing
> 2011-01-24 15:23:55,477 INFO  route1 - In the beginning!  Body=X
> 2011-01-24 15:23:55,477 INFO  route1 - choice 1
> 2011-01-24 15:23:55,977 INFO  route1 - choice 2
> 2011-01-24 15:23:56,477 INFO  route2 - In the middle!  Body=DUMMY
> 2011-01-24 15:23:56,477 INFO  route1 - In the end!  Body=DUMMY
> 
> I'm using Camel 2.5.0.
> 
> Thanks in advance,
> Mark
> 
> Mark Borner
> Java Developer - ZStream Xpress
> 
> ----
> This email is intended for the named recipient only. It may contain 
> information which is confidential, commercially sensitive, or 
> copyright. If you are not the intended recipient you must not 
> reproduce or distribute any part of the email, disclose its contents, 
> or take any action in reliance. If you have received this email in 
> error, please contact the sender and delete the message. It is your 
> responsibility to scan this email and any attachments for viruses and 
> other defects. To the extent permitted by law, Zurich and its 
> associates will not be liable for any loss or damage arising in any 
> way from this communication including any file attachments. We may 
> monitor email you send to us, either as a reply to this email or any 
> email you send to us, to confirm our systems are protected and for 
> compliance with company policies. Although we take reasonable 
> precautions to protect the confidentiality of our email systems, we 
> do not warrant the confidentiality or security of email or 
> attachments we receive.
> 
-- 
View this message in context: http://camel.465427.n5.nabble.com/Delay-causes-unexpected-results-tp3354254p3357308.html
Sent from the Camel - Users mailing list archive at Nabble.com.