Hello Everybody,

I found that if I change in my bean:
from: 
         System.out.println(" received message. returning error.");
         exchange.setStatus(ExchangeStatus.ERROR);
        channel.send(exchange); 

to:
         System.out.println(" received message. returning error.");
         throw new MessagingException(" ALWAYS RETURN ERROR. throw messaging 
exception.");

camel is catching the error correctly and making redeliveries and sending to 
deadletter endpoint.

I searched on the documentation and google, but didn't find the response; my 
question is: what is the difference between returning an error exchange and 
throw an exception? which is the recommended way of handling errors in bean? 
and 
what about patterns on error handling on servicemix?

Thank you very much.

Regards.
Javier.  




________________________________
From: Javier Arias <[email protected]>
To: [email protected]
Sent: Thu, July 8, 2010 12:54:22 PM
Subject: Camel dealetter + Bean strange behaviour


Hello All,

Our general error policy for some parts of our processes is to use a camel 
deadletter queue (on file). 


What I am trying to do is (sm 3.3.1)

FILE POLLER => CAMEL DEADLETTER => BEAN

In case of error CAMEL would send to a file sender.

So, in an SA we have a bean that make some actions and return DONE or ERROR 
depending  on the result, what I would expect is that if the bean returns ERROR 
camel retries for a number of times and sends to the deadletter, but this is 
not 
done. It is not retrying or sending to deadletter, and my msg disappears (msg 
comes from a file poller).
>From other part of the process we are sending an email, which works perfectly 
with camel deadletter, retrying and sending to deadletter when necessary.

Probably I am doing wrong but I do not know what.

Below is an example (also, I attached my sample SA):

Thank you in advance.
Javier

====================================================================
BEAN :::
====================================================================
package playground.bean;

import javax.annotation.Resource;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;

import  org.apache.servicemix.jbi.listener.MessageExchangeListener;

public class AlwaysErrorBean implements MessageExchangeListener {

    @Resource
    private DeliveryChannel channel;
    
    @Override
    public void onMessageExchange(MessageExchange exchange) throws 
MessagingException {
        if (exchange.getStatus() != ExchangeStatus.ACTIVE) {
            System.out.println("onMessageExchange : RECEIVED NON ACTIVE 
EXCHANGE 
: " + exchange.getStatus().toString());
            return;
        }
        
        System.out.println(" received message. returning error.");
        exchange.setStatus(ExchangeStatus.ERROR);
        channel.send(exchange);    
    }
}

====================================================================
CAMEL ROUTE ::: 
====================================================================

package playground.camel;
    import org.apache.camel.Exchange;
    import org.apache.camel.Processor;
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.model.InterceptorType;
    import org.apache.camel.processor.DelegateProcessor;

    public class CamelRouteBuilder extends RouteBuilder {
        
        private final static String JBI_ENDP = "jbi:endpoint:";
         private final static String NAMESPACE = "http://playground";;
        
            public void configure() throws Exception {

                DelegateProcessor proc = new DelegateProcessor(){
                     public void process(Exchange exchange) throws Exception {
                        System.out.println(exchange.toString());
                        processNext(exchange);
                    }
        
                    protected void processNext(Exchange exchange) throws 
Exception {
                        if (processor != null) {
                            processor.process(exchange);
                        }
                    }
                };
//                ALTERNATIVE 1 : SEND TO ALWAYSERROR BEAN
                from(JBI_ENDP+NAMESPACE+"/camelDeadLetter/camelDeadLetterEp")
                    
.errorHandler(deadLetterChannel(JBI_ENDP+NAMESPACE+"/deadLetter/deadLetterEp")) 
  
             

                    
.to(JBI_ENDP+NAMESPACE+"/alwaysErrorBean/alwaysErrorBeanEp").addInterceptor(proc);

//                 ALTERNATIVE 2 : SEND TO MAIL COMPONENT                
//                from(JBI_ENDP+NAMESPACE+"/camelDeadLetter/camelDeadLetterEp")
//                
.errorHandler(deadLetterChannel(JBI_ENDP+NAMESPACE+"/deadLetter/deadLetterEp")) 
  
             

//                 
.to(JBI_ENDP+NAMESPACE+"/emailSender/emailSenderEp").addInterceptor(proc);

            }
}


      

Reply via email to