You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/01/31 09:20:24 UTC

svn commit: r1238239 - in /camel/branches/camel-2.9.x: ./ camel-core/src/main/java/org/apache/camel/impl/ components/camel-jaxb/ components/camel-jaxb/src/test/ components/camel-jms/ components/camel-jms/src/main/java/org/apache/camel/component/jms/ co...

Author: davsclaus
Date: Tue Jan 31 08:20:23 2012
New Revision: 1238239

URL: http://svn.apache.org/viewvc?rev=1238239&view=rev
Log:
CAMEL-4958: Added spring errorHandler to JMS listener, to avoid Spring complaining, and allow to configure logging levels to tune verbosity.

Added:
    camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultSpringErrorHandler.java
      - copied unchanged from r1238225, camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultSpringErrorHandler.java
    camel/branches/camel-2.9.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionRollbackTest.java
      - copied unchanged from r1238225, camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionRollbackTest.java
    camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionRollbackTest.xml
      - copied unchanged from r1238225, camel/trunk/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionRollbackTest.xml
Modified:
    camel/branches/camel-2.9.x/   (props changed)
    camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/LoggingExceptionHandler.java
    camel/branches/camel-2.9.x/components/camel-jaxb/   (props changed)
    camel/branches/camel-2.9.x/components/camel-jaxb/src/test/   (props changed)
    camel/branches/camel-2.9.x/components/camel-jms/   (props changed)
    camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java
    camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
    camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
    camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
    camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java
    camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java
    camel/branches/camel-2.9.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.java
    camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/log4j.properties

Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 31 08:20:23 2012
@@ -1 +1 @@
-/camel/trunk:1235643,1236639,1236667,1237666,1237807
+/camel/trunk:1235643,1236639,1236667,1237666,1237807,1238225

Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/LoggingExceptionHandler.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/LoggingExceptionHandler.java?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/LoggingExceptionHandler.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/LoggingExceptionHandler.java Tue Jan 31 08:20:23 2012
@@ -62,7 +62,11 @@ public class LoggingExceptionHandler imp
                 // do not log stacktrace for intended rollbacks
                 logger.log(msg);
             } else {
-                logger.log(msg, exception);
+                if (exception != null) {
+                    logger.log(msg, exception);
+                } else {
+                    logger.log(msg);
+                }
             }
         } catch (Throwable e) {
             // the logging exception handler must not cause new exceptions to occur
@@ -70,6 +74,9 @@ public class LoggingExceptionHandler imp
     }
 
     protected boolean isCausedByRollbackExchangeException(Throwable exception) {
+        if (exception == null) {
+            return false;
+        }
         if (exception instanceof RollbackExchangeException) {
             return true;
         } else if (exception.getCause() != null) {

Propchange: camel/branches/camel-2.9.x/components/camel-jaxb/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 31 08:20:23 2012
@@ -1 +1 @@
-/camel/trunk/components/camel-jaxb:1235643,1236403-1236663,1236667,1237148,1237666,1237807
+/camel/trunk/components/camel-jaxb:1235643,1236403-1236663,1236667,1237148,1237666,1237807,1238225

Propchange: camel/branches/camel-2.9.x/components/camel-jaxb/src/test/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 31 08:20:23 2012
@@ -1 +1 @@
-/camel/trunk/components/camel-jaxb/src/test:1235643,1236403-1236663,1236667,1237148,1237230,1237666,1237807
+/camel/trunk/components/camel-jaxb/src/test:1235643,1236403-1236663,1236667,1237148,1237230,1237666,1237807,1238225

Propchange: camel/branches/camel-2.9.x/components/camel-jms/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 31 08:20:23 2012
@@ -1 +1 @@
-/camel/trunk/components/camel-jms:1235643,1236639,1236667,1237666,1237807,1238060
+/camel/trunk/components/camel-jms:1235643,1236639,1236667,1237666,1237807,1238060,1238225

Modified: camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java (original)
+++ camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java Tue Jan 31 08:20:23 2012
@@ -29,7 +29,6 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.RollbackExchangeException;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.impl.LoggingExceptionHandler;
 import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.util.AsyncProcessorConverterHelper;
 import org.apache.camel.util.AsyncProcessorHelper;
@@ -125,9 +124,12 @@ public class EndpointMessageListener imp
         }
 
         // an exception occurred so rethrow to trigger rollback on JMS listener
+        // the JMS listener will use the error handler to handle the uncaught exception
         if (rce != null) {
-            handleException(rce);
             LOG.trace("onMessage END throwing exception: {}", rce.getMessage());
+            // Spring message listener container will handle uncaught exceptions
+            // being thrown from this onMessage, and will us the ErrorHandler configured
+            // on the JmsEndpoint to handle the exception
             throw rce;
         }
 
@@ -213,8 +215,10 @@ public class EndpointMessageListener imp
                     // method and rethrow it
                     exchange.setException(rce);
                 } else {
-                    // we were done async, so use the Camel built in exception handler to deal with it
-                    handleException(rce);
+                    // we were done async, so use the endpoint error handler
+                    if (endpoint.getErrorHandler() != null) {
+                        endpoint.getErrorHandler().handleError(rce);
+                    }
                 }
             }
         }
@@ -256,9 +260,6 @@ public class EndpointMessageListener imp
     }
 
     public ExceptionHandler getExceptionHandler() {
-        if (exceptionHandler == null) {
-            exceptionHandler = new LoggingExceptionHandler(getClass());
-        }
         return exceptionHandler;
     }
 
@@ -398,15 +399,6 @@ public class EndpointMessageListener imp
         return destination;
     }
 
-    /**
-     * Handles the given exception using the {@link #getExceptionHandler()}
-     *
-     * @param t the exception to handle
-     */
-    protected void handleException(Throwable t) {
-        getExceptionHandler().handleException(t);
-    }
-
     @Override
     public String toString() {
         return "EndpointMessageListener[" + endpoint + "]";

Modified: camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java (original)
+++ camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java Tue Jan 31 08:20:23 2012
@@ -23,6 +23,7 @@ import javax.jms.Session;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.impl.DefaultComponent;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
@@ -210,8 +211,16 @@ public class JmsComponent extends Defaul
 
     public void setErrorHandler(ErrorHandler errorHandler) {
         getConfiguration().setErrorHandler(errorHandler);
-    }    
-    
+    }
+
+    public void setErrorHandlerLoggingLevel(LoggingLevel errorHandlerLoggingLevel) {
+        getConfiguration().setErrorHandlerLoggingLevel(errorHandlerLoggingLevel);
+    }
+
+    public void setErrorHandlerLogStackTrace(boolean errorHandlerLogStackTrace) {
+        getConfiguration().setErrorHandlerLogStackTrace(errorHandlerLogStackTrace);
+    }
+
     public void setExplicitQosEnabled(boolean explicitQosEnabled) {
         getConfiguration().setExplicitQosEnabled(explicitQosEnabled);
     }

Modified: camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java (original)
+++ camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java Tue Jan 31 08:20:23 2012
@@ -24,6 +24,7 @@ import javax.jms.Message;
 import javax.jms.MessageProducer;
 import javax.jms.Session;
 
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -68,7 +69,9 @@ public class JmsConfiguration implements
     // Used to configure the spring Container
     private ExceptionListener exceptionListener;
     private ConsumerType consumerType = ConsumerType.Default;
-    private ErrorHandler errorHandler;    
+    private ErrorHandler errorHandler;
+    private LoggingLevel errorHandlerLoggingLevel = LoggingLevel.WARN;
+    private boolean errorHandlerLogStackTrace = true;
     private boolean autoStartup = true;
     private boolean acceptMessagesWhileStopping;
     private String clientId;
@@ -494,7 +497,23 @@ public class JmsConfiguration implements
     public ErrorHandler getErrorHandler() {
         return errorHandler;
     }
-    
+
+    public LoggingLevel getErrorHandlerLoggingLevel() {
+        return errorHandlerLoggingLevel;
+    }
+
+    public void setErrorHandlerLoggingLevel(LoggingLevel errorHandlerLoggingLevel) {
+        this.errorHandlerLoggingLevel = errorHandlerLoggingLevel;
+    }
+
+    public boolean isErrorHandlerLogStackTrace() {
+        return errorHandlerLogStackTrace;
+    }
+
+    public void setErrorHandlerLogStackTrace(boolean errorHandlerLogStackTrace) {
+        this.errorHandlerLogStackTrace = errorHandlerLogStackTrace;
+    }
+
     @Deprecated
     public boolean isSubscriptionDurable() {
         return subscriptionDurable;
@@ -876,6 +895,9 @@ public class JmsConfiguration implements
 
         if (errorHandler != null) {
             container.setErrorHandler(errorHandler);
+        } else {
+            ErrorHandler handler = new DefaultSpringErrorHandler(EndpointMessageListener.class, getErrorHandlerLoggingLevel(), isErrorHandlerLogStackTrace());
+            container.setErrorHandler(handler);
         }
 
         container.setAcceptMessagesWhileStopping(acceptMessagesWhileStopping);

Modified: camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java (original)
+++ camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java Tue Jan 31 08:20:23 2012
@@ -34,6 +34,7 @@ import javax.jms.Topic;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.MultipleConsumersSupport;
 import org.apache.camel.PollingConsumer;
 import org.apache.camel.Processor;
@@ -548,8 +549,23 @@ public class JmsEndpoint extends Default
     public ErrorHandler getErrorHandler() {
         return getConfiguration().getErrorHandler();
     }
+
+    @ManagedAttribute
+    public LoggingLevel getErrorHandlerLoggingLevel() {
+        return getConfiguration().getErrorHandlerLoggingLevel();
+    }
     
     @ManagedAttribute
+    public boolean isErrorHandlerLogStackTrace() {
+        return getConfiguration().isErrorHandlerLogStackTrace();
+    }
+
+    @ManagedAttribute
+    public void setErrorHandlerLogStackTrace(boolean errorHandlerLogStackTrace) {
+        getConfiguration().setErrorHandlerLogStackTrace(errorHandlerLogStackTrace);
+    }
+
+    @ManagedAttribute
     public int getIdleTaskExecutionLimit() {
         return getConfiguration().getIdleTaskExecutionLimit();
     }

Modified: camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java (original)
+++ camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java Tue Jan 31 08:20:23 2012
@@ -25,6 +25,7 @@ import javax.jms.Session;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
+import org.apache.camel.component.jms.DefaultSpringErrorHandler;
 import org.apache.camel.component.jms.ReplyToType;
 import org.springframework.jms.listener.AbstractMessageListenerContainer;
 import org.springframework.jms.listener.DefaultMessageListenerContainer;
@@ -184,6 +185,8 @@ public class PersistentQueueReplyManager
         }
         if (endpoint.getErrorHandler() != null) {
             answer.setErrorHandler(endpoint.getErrorHandler());
+        } else {
+            answer.setErrorHandler(new DefaultSpringErrorHandler(PersistentQueueReplyManager.class, endpoint.getErrorHandlerLoggingLevel(), endpoint.isErrorHandlerLogStackTrace()));
         }
         if (endpoint.getReceiveTimeout() >= 0) {
             answer.setReceiveTimeout(endpoint.getReceiveTimeout());

Modified: camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java (original)
+++ camel/branches/camel-2.9.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java Tue Jan 31 08:20:23 2012
@@ -24,6 +24,7 @@ import javax.jms.TemporaryQueue;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
+import org.apache.camel.component.jms.DefaultSpringErrorHandler;
 import org.springframework.jms.listener.AbstractMessageListenerContainer;
 import org.springframework.jms.listener.DefaultMessageListenerContainer;
 import org.springframework.jms.support.destination.DestinationResolver;
@@ -113,7 +114,9 @@ public class TemporaryQueueReplyManager 
         }
         if (endpoint.getErrorHandler() != null) {
             answer.setErrorHandler(endpoint.getErrorHandler());
-        }        
+        } else {
+            answer.setErrorHandler(new DefaultSpringErrorHandler(TemporaryQueueReplyManager.class, endpoint.getErrorHandlerLoggingLevel(), endpoint.isErrorHandlerLogStackTrace()));
+        }
         if (endpoint.getReceiveTimeout() >= 0) {
             answer.setReceiveTimeout(endpoint.getReceiveTimeout());
         }

Modified: camel/branches/camel-2.9.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.java?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.java (original)
+++ camel/branches/camel-2.9.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.java Tue Jan 31 08:20:23 2012
@@ -44,7 +44,7 @@ public class JMSTransactionErrorHandlerT
         mock.expectedBodiesReceived("Bye World");
         // success at 3rd attempt
         mock.message(0).header("count").isEqualTo(3);
-        // and since it was Camel doing the redelivey we should have headers for this
+        // and since it was Camel doing the redelivery we should have headers for this
         mock.message(0).header(Exchange.REDELIVERED).isEqualTo(true);
         mock.message(0).header(Exchange.REDELIVERY_COUNTER).isEqualTo(2);
         // and not JMS doing the redelivery

Modified: camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/log4j.properties?rev=1238239&r1=1238238&r2=1238239&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/log4j.properties (original)
+++ camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/log4j.properties Tue Jan 31 08:20:23 2012
@@ -16,10 +16,17 @@
 ## ---------------------------------------------------------------------------
 
 #
-# The logging properties used during tests..
+# The logging properties used
 #
 log4j.rootLogger=INFO, out
 
+#log4j.logger.org.apache.activemq.spring=WARN
+#log4j.logger.org.apache.camel.component.jms=TRACE
+#log4j.logger.org.apache.camel.component.jms.reply.CorrelationMap=DEBUG
+#log4j.logger.org.apache.camel.component.jms.reply=TRACE
+#log4j.logger.org.apache.camel=DEBUG
+#log4j.logger.org.springframework.jms.listener=TRACE
+
 # CONSOLE appender not used by default
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
@@ -32,12 +39,3 @@ log4j.appender.out.layout.ConversionPatt
 log4j.appender.out.file=target/camel-jms-test.log
 log4j.appender.out.append=true
 
-log4j.logger.org.apache.camel.impl.converter=WARN
-log4j.logger.org.apache.camel.management=WARN
-log4j.logger.org.apache.camel.impl.DefaultPackageScanClassResolver=WARN
-#log4j.logger.org.apache.activemq.spring=WARN
-#log4j.logger.org.apache.camel.component.jms=TRACE
-#log4j.logger.org.apache.camel.component.jms.reply.CorrelationMap=DEBUG
-#log4j.logger.org.apache.camel.component.jms.reply=TRACE
-#log4j.logger.org.apache.camel=DEBUG
-#log4j.logger.org.springframework.jms.listener=TRACE