You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Keith Freeman (JIRA)" <ji...@apache.org> on 2013/10/29 19:40:26 UTC

[jira] [Created] (CAMEL-6912) seda producer doesn't allow errohandlers to work properly

Keith Freeman created CAMEL-6912:
------------------------------------

             Summary: seda producer doesn't allow errohandlers to work properly
                 Key: CAMEL-6912
                 URL: https://issues.apache.org/jira/browse/CAMEL-6912
             Project: Camel
          Issue Type: Bug
    Affects Versions: 2.12.1
         Environment: linux
            Reporter: Keith Freeman


I'm building my route like this:

//context.setTracing(true);
errorHandler(loggingErrorHandler("whatever").level(LoggingLevel.ERROR));
from("direct:start").log("start:
${body}").to("seda:seda1?size=2&blockWhenFull=false").log("after: ${body}");

When I run it and send it 3 messages the first 2 log ok (both "start" and
"after"), but the 3rd message (which fills the seda queue and throws a
"Queue full" exception) only shows up in a "start" log message, no
exception is shown or delivered to my test code, and the route just shuts
down with no ERROR log.

However if I uncomment "context.setTracing(true)", then the 3rd message
triggers my error handler and its "whatever" log message, along with a
stack trace, etc.

My understanding is that the "errorHandler(...)" call sets the error
handler for the entire context.  So why doesn't it get triggered unless I
turn on tracing?

I've attached the entire junit-4 test.

package xp;

import static org.junit.Assert.*;

import org.apache.camel.CamelContext;
import org.apache.camel.LoggingLevel;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.ExchangeBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class ErrHandlingCamel
{
    private CamelContext context;
    private ProducerTemplate template;

    @Before
    public void setUp() throws Exception
    {
        context = new DefaultCamelContext();
        template = context.createProducerTemplate();

        context.addRoutes(new RouteBuilder()
        {
            public void configure() throws Exception
            {
                // seda test, queue is full after 2 messages,
                {
                    //context.setTracing(true);
                    errorHandler(loggingErrorHandler("whatever").level(LoggingLevel.ERROR));

                    from("direct:start").log("start: ${body}").to("seda:seda1?size=2&blockWhenFull=false").log("after: ${body}");
                }

            }
        });
        context.start();
    }

    @After
    public void tearDown() throws Exception
    {
        template.stop();
        context.stop();
    }

    @Test
    public void testErrHandling() throws Exception
    {
        try
        {
            for (int i = 0; i < 3; i++)
                template.send("direct:start", ExchangeBuilder.anExchange(context).withBody("msg" + i).build());
        }
        catch (Exception ex)
        {
            System.err.println("test failed! caught exception:" + ex);
            ex.printStackTrace(System.err);
            fail();
        }
    }
}




--
This message was sent by Atlassian JIRA
(v6.1#6144)