Hi,

I ran into a problem with a route that called a seda endpoint. For some
reason the unit of work within the seda route was completed before the
actual route processing finished. Here's a simplified test case:

public class SedaUnitOfWorkTest {
    private String lastOne;
    
    @Test
    public void testSeda() throws Exception {
        CamelContext context = new DefaultCamelContext();
        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:start")
                    .to("seda:foo")
                    .delayer(2000);
                
                from("seda:foo")
                    .process(new Processor() {
                        @Override
                        public void process(Exchange exchange) throws
Exception {
                            exchange.getUnitOfWork().addSynchronization(new
Synchronization() {
                                @Override
                                public void onComplete(Exchange exchange) {
                                    lastOne = "UnitOfWork";
                                }

                                @Override
                                public void onFailure(Exchange exchange) {
                                    lastOne = "UnitOfWork";
                                }                                
                            });
                        }                        
                    })
                    .delayer(4000)
                    .process(new Processor() {
                        @Override
                        public void process(Exchange exchange) throws
Exception {
                            lastOne = "Processor";
                        }                        
                    });
            }            
        });
        
        context.start();
        context.createProducerTemplate().send("direct:start", new
DefaultExchange(context));
        
        Thread.sleep(7000);       
        
        assertEquals("UnitOfWork", lastOne);
    }
}

I'm expecting that the unit of work is the last thing that sets the field
'lastOne'. But it isn't, the processor is called after the unit of work
finished.

What happens is that the exchange within the Seda route does not have its
own UnitOfWork, it is using that of the other route. This might be ok if the
processing of the second route would be synchronous. But as it is not, I
would expect that the second route either has its own unit of work or
onComplete is only called if both routes have finished processing the
exchange. Or am I wrong?

Thanks,
Jens

-- 
View this message in context: 
http://www.nabble.com/UnitOfWork-ends-too-soon-with-Seda-endpoints-tp22950359p22950359.html
Sent from the Camel - Users (activemq) mailing list archive at Nabble.com.

Reply via email to