Thanks for all the input. Much appreciated. I think I found an alternate
explanation: the synchronization is being called for each sub-route.

So, with the hello chain below, the synchronization is called for
servlet:///bye, for direct:hello1, and for direct:hello2. To address this,
I execute the onAfterRoute body only if the end point contains servlet.

Does that sound right? It seems to address my issue.

<get uri="/bye">
   <to uri="direct:hello1"/>
</get>
<route>
    <from uri="direct:hello1"/>
    <to uri="direct:hello2"
</route>

<route>
    <from uri="direct:hello2"/>
    <transform><constant>Hello</constant></transform>
</route>


On Thu, Oct 2, 2014 at 4:24 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:

> javadoc is the main documentation of apis in java.
>
> But you are welcome to knock yourself on the Camel wiki if you like
> http://camel.apache.org/oncompletion.html
>
> On Thu, Oct 2, 2014 at 10:16 AM, Charles Moulliard <ch0...@gmail.com>
> wrote:
> > That should be documented somewhere (maybe page oncompletion.html) as the
> > javadoc is not sufficient enough as source of information for the end
> users.
> >
> >
> > On Thu, Oct 2, 2014 at 9:33 AM, Claus Ibsen <claus.ib...@gmail.com>
> wrote:
> >
> >> No please read the javadoc of
> >> org.apache.camel.spi.SynchronizationRouteAware
> >>
> >> Its called 3 times because
> >> - before routing
> >> - after route
> >> - done (either onComplete or onFailure)
> >>
> >> On Thu, Oct 2, 2014 at 9:17 AM, Charles Moulliard <ch0...@gmail.com>
> >> wrote:
> >> > Hi Max,
> >> >
> >> > Is it called 3 times because an exception has been throw in the route
> ?
> >> Do
> >> > you have a test case that we could use to have a look and reproduce
> the
> >> > issue ?
> >> >
> >> > Regards,
> >> >
> >> >
> >> > On Thu, Oct 2, 2014 at 5:21 AM, Max Bridgewater <
> >> max.bridgewa...@gmail.com>
> >> > wrote:
> >> >
> >> >> Some progress on this. It appears that in Camel 2.14, there is now an
> >> >> interface called SynchronizationRouteAware in addition to
> >> Synchronization.
> >> >> SynchronizationRouteAwarehas two additional methods onAfterRoute and
> >> >> onBeforeRoute.
> >> >>
> >> >> What I've done is implement onAfterRoute and call my completion logic
> >> >> there. I left onComplete and onBeforeRoute empty.
> >> >>
> >> >> Things seem to work well and the synchronization is called at the
> end of
> >> >> the route as it was the case with Camel 2.13. The only caveat now is
> >> that
> >> >> the synchronization is being called 3 times instead of just once.
> >> >>
> >> >> Why is this?
> >> >>
> >> >> My Synchronization looks as follows:
> >> >>
> >> >> exchange.getUnitOfWork().addSynchronization(
> >> >>                             SynchronizationRouteAware(){
> >> >>                         public void onAfterRoute(Route route,
> >> Exchange
> >> >> exchange){
> >> >>                                 myCompletionLogic(exchange)
> >> >>                         }
> >> >>                         public void onBeforeRoute(Route route,
> Exchange
> >> >> exchange){
> >> >>                             //Left Empty
> >> >>                         }
> >> >>                         public void      myCompletionLogic(Exchange
> x){
> >> >>                             //My completion logic here
> >> >>                         }
> >> >>                         public void      onComplete(Exchange x){
> >> >>                             //Left empty
> >> >>                         }
> >> >>                         public void      onFailure(Exchange x){
> >> >>                             //Left empty
> >> >>                         }
> >> >>
> >> >>                             }
> >> >>
> >> >>                         );
> >> >>
> >> >> On Wed, Oct 1, 2014 at 2:35 PM, Max Bridgewater <
> >> max.bridgewa...@gmail.com
> >> >> >
> >> >> wrote:
> >> >>
> >> >> > Hi,
> >> >> >
> >> >> > In Came 2.14, onCompletion now has a mode parameter that allows
> >> >> > controlling if the onCompletion body is to be executed after or
> before
> >> >> the
> >> >> > route consumer.
> >> >> >
> >> >> > How does this impact UnitOfWork? Is there a way to also control
> when a
> >> >> > synchronization is to be executed?
> >> >> >
> >> >> > I haven't fully isolated the issue yet. But I seem to have a case
> >> where
> >> >> > UnitOfWork was executed before the route consumer while with Camel
> >> 2.14,
> >> >> it
> >> >> > is not executed after the route consumer has started.
> >> >> >
> >> >> > Any thoughts?
> >> >> >
> >> >> > Regards,
> >> >> > Max.
> >> >> >
> >> >> >
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Charles Moulliard
> >> > Apache Committer / Architect @RedHat
> >> > Twitter : @cmoulliard | Blog :  http://cmoulliard.github.io
> >>
> >>
> >>
> >> --
> >> Claus Ibsen
> >> -----------------
> >> Red Hat, Inc.
> >> Email: cib...@redhat.com
> >> Twitter: davsclaus
> >> Blog: http://davsclaus.com
> >> Author of Camel in Action: http://www.manning.com/ibsen
> >> hawtio: http://hawt.io/
> >> fabric8: http://fabric8.io/
> >>
> >
> >
> >
> > --
> > Charles Moulliard
> > Apache Committer / Architect @RedHat
> > Twitter : @cmoulliard | Blog :  http://cmoulliard.github.io
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: cib...@redhat.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
> hawtio: http://hawt.io/
> fabric8: http://fabric8.io/
>

Reply via email to