People is welcome to experiment with the Java DSL to see if you can find a nicer solution.
I added 2 tests in the CBR which is the goal to have working. Just rename endChoice to end. The commit is here: http://svn.apache.org/viewvc?rev=1071613&view=rev On Thu, Feb 17, 2011 at 2:52 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Hmmm DSL in pure Java is pants. > I have made several attempts, and it may compile but then fail at runtime. > > The endChoice is out best option so far. So I am gonna commit that so > people can use the CBR with whatever EIPs inside as they want to do. > > Without this they would have to create new routes and use direct > endpoint to link them. > > > > On Thu, Feb 17, 2011 at 1:38 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: >> Hi >> >> Thanks for the suggestions. I have created a ticket >> https://issues.apache.org/jira/browse/CAMEL-3678 >> >> I managed to get a bit further. I will attach a patch with as far as I will >> get. >> >> You can actually have the code compile, but when you run the Java DSL >> fails with a type cast exception when starting. >> >> However I am running full test now with some improvements to see where >> the spots are. >> >> >> >> On Thu, Feb 17, 2011 at 12:52 PM, <mitko.ko...@icw.de> wrote: >>> Hi Claus, >>> >>> you do not need to override the to actually, it's my mistake. Your example >>> compiles without overriding the "to" method (s) and whatever methods. >>> because >>> >>> extends ProcessorDefinition<Type> >>> >>> >>> gives processor definition the right type. >>> >>> Regards, >>> Mitko >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> From: >>> Claus Ibsen <claus.ib...@gmail.com> >>> To: >>> dev@camel.apache.org >>> Date: >>> 17.02.2011 12:36 >>> Subject: >>> Re: [DISCUSS] - Java DSL caveat with the Content Based Router >>> >>> >>> >>> Hi >>> >>> It is a good idea but do we really dont want to override every methods >>> from ProcessorDefinition in all the sub classes, to work around the >>> limitations with DSLs in Java? And the implications of keeping the >>> code synchronized. >>> >>> >>> >>> >>> On Thu, Feb 17, 2011 at 11:54 AM, <mitko.ko...@icw.de> wrote: >>>> Hello Camel Developers what about this: >>>> >>>> >>>> public class LoadBalanceDefinition<Type extends >>> ProcessorDefinition<Type>> >>>> extends ProcessorDefinition<Type> { >>>> >>>> ... >>>> >>>> public LoadBalanceDefinition<Type> roundRobin() { >>>> >>>> ... >>>> @SuppressWarnings("unchecked") >>>> public Type to(String uri) { >>>> return (Type) this; >>>> } >>>> ... >>>> >>>> >>>> } >>>> >>>> Thus you preserve the type safety and you example works. >>>> >>>> >>>> Regards, >>>> Mitko >>>> >>>> >>>> >>>> >>>> From: >>>> Claus Ibsen <claus.ib...@gmail.com> >>>> To: >>>> dev <dev@camel.apache.org> >>>> Date: >>>> 17.02.2011 09:49 >>>> Subject: >>>> [DISCUSS] - Java DSL caveat with the Content Based Router >>>> >>>> >>>> >>>> Hi >>>> >>>> DSL in plain Java is somewhat limited how far you can go with Java and >>>> Generics. >>>> >>>> A common issue over the times has been the Content Based Router where >>>> users would use other "complex patterns" inside the when/otherwise >>>> blocks. >>>> By complex patterns I mean patterns which have additional DSL for >>>> configuration. Or for example multicast or load balancer which re-uses >>>> the commons DSL's, but under the given mode (eg multicast or load >>>> balancing). >>>> >>>> To indicate when the pattern "ends" you would have to use .end() and >>>> the DSL would return back the scope to the previous pattern. But >>>> that's not possible, as the Java Generics Type System sucks for doing >>>> DSLs. >>>> >>>> I have been experimenting to see if there was a way to tell in the >>>> end, which "scope" to return back to. So in the Content Based Router >>>> example, you could indicate: Choice, eg >>>> >>>> .end(ChoiceDefinition.class) >>>> >>>> But that doesn't work. >>>> So the best solution I have found is as follows: >>>> >>>> >>>> from("direct:start") >>>> .choice() >>>> .when(body().contains("Camel")) >>>> // we need to use endChoice to tell Java >>>> DSL to return scope back to the choice DSL >>>> >>>> .loadBalance().roundRobin().to("mock:foo").to("mock:bar").endChoice() >>>> .otherwise() >>>> .to("mock:result"); >>>> >>>> If you don't have .endChoice() then the code above will not compile. >>>> >>>> >>>> By introducing a method named: endChoice, we can force the Java DSL to >>>> return back to the CBR scope. >>>> >>>> Since this problem mostly manifests itself with the Content Based >>>> Router, then I think this is the best we can do as far. >>>> However do you think endChoice is a good name? It may indicate it ends >>>> the entire CBR block? >>>> >>>> We could also name it >>>> - asChoice >>>> - endAsChoice >>>> - endAndBackToChoice >>>> - backToChoice >>>> - scopeAsChoice >>>> >>>> Any good name? >>>> >>>> >>>> >>>> >>>> -- >>>> Claus Ibsen >>>> ----------------- >>>> FuseSource >>>> Email: cib...@fusesource.com >>>> Web: http://fusesource.com >>>> Twitter: davsclaus >>>> Blog: http://davsclaus.blogspot.com/ >>>> Author of Camel in Action: http://www.manning.com/ibsen/ >>>> >>>> >>>> >>>> >>>> InterComponentWare AG: >>>> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler >>>> Aufsichtsratsvors.: Prof. Dr. Christof Hettich >>>> Firmensitz: 69190 Walldorf, Altrottstraße 31 >>>> AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516 >>> >>> >>> >>> -- >>> Claus Ibsen >>> ----------------- >>> FuseSource >>> Email: cib...@fusesource.com >>> Web: http://fusesource.com >>> Twitter: davsclaus >>> Blog: http://davsclaus.blogspot.com/ >>> Author of Camel in Action: http://www.manning.com/ibsen/ >>> >>> >>> >>> >>> >>> InterComponentWare AG: >>> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler >>> Aufsichtsratsvors.: Prof. Dr. Christof Hettich >>> Firmensitz: 69190 Walldorf, Altrottstraße 31 >>> AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516 >> >> >> >> -- >> Claus Ibsen >> ----------------- >> FuseSource >> Email: cib...@fusesource.com >> Web: http://fusesource.com >> Twitter: davsclaus >> Blog: http://davsclaus.blogspot.com/ >> Author of Camel in Action: http://www.manning.com/ibsen/ >> > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: cib...@fusesource.com > Web: http://fusesource.com > Twitter: davsclaus > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/