Author: davsclaus
Date: Wed Feb 1 10:46:03 2012
New Revision: 1239046
URL: http://svn.apache.org/viewvc?rev=1239046&view=rev
Log:
CAMEL-4965: Allow to configure transaction error handler rollback logging level.
Modified:
camel/branches/camel-2.9.x/ (props changed)
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/test/resources/org/apache/camel/component/jms/tx/JMSTransactionIsTransactedRedeliveredTest.xml
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Feb 1 10:46:03 2012
@@ -1 +1 @@
-/camel/trunk:1235643,1236639,1236667,1237666,1237807,1238225,1238229,1238387,1238463,1238477,1238503,1238937,1238988,1239006
+/camel/trunk:1235643,1236639,1236667,1237666,1237807,1238225,1238229,1238387,1238463,1238477,1238503,1238937,1238988,1239006,1239045
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Propchange: camel/branches/camel-2.9.x/components/camel-jaxb/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Feb 1 10:46:03 2012
@@ -1 +1 @@
-/camel/trunk/components/camel-jaxb:1235643,1236403-1236663,1236667,1237148,1237666,1237807,1238225,1238229,1238387,1238463,1238477,1238503,1238988,1239006
+/camel/trunk/components/camel-jaxb:1235643,1236403-1236663,1236667,1237148,1237666,1237807,1238225,1238229,1238387,1238463,1238477,1238503,1238988,1239006,1239045
Propchange: camel/branches/camel-2.9.x/components/camel-jaxb/src/test/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Feb 1 10:46:03 2012
@@ -1 +1 @@
-/camel/trunk/components/camel-jaxb/src/test:1235643,1236403-1236663,1236667,1237148,1237230,1237666,1237807,1238225,1238229,1238387,1238463,1238477,1238503,1238988,1239006
+/camel/trunk/components/camel-jaxb/src/test:1235643,1236403-1236663,1236667,1237148,1237230,1237666,1237807,1238225,1238229,1238387,1238463,1238477,1238503,1238988,1239006,1239045
Propchange: camel/branches/camel-2.9.x/components/camel-jms/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Feb 1 10:46:03 2012
@@ -1 +1 @@
-/camel/trunk/components/camel-jms:1235643,1236639,1236667,1237666,1237807,1238060,1238225,1238229,1238387,1238463,1238477,1238503,1238988,1239006
+/camel/trunk/components/camel-jms:1235643,1236639,1236667,1237666,1237807,1238060,1238225,1238229,1238387,1238463,1238477,1238503,1238988,1239006,1239045
Modified:
camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionIsTransactedRedeliveredTest.xml
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionIsTransactedRedeliveredTest.xml?rev=1239046&r1=1239045&r2=1239046&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionIsTransactedRedeliveredTest.xml
(original)
+++
camel/branches/camel-2.9.x/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionIsTransactedRedeliveredTest.xml
Wed Feb 1 10:46:03 2012
@@ -46,8 +46,8 @@
<camelContext xmlns="http://camel.apache.org/schema/spring">
- <!-- we do not want any exceptions to be logged -->
- <errorHandler id="txEH" type="TransactionErrorHandler">
+ <!-- we do not want any exceptions to be logged, neither that a rollback
occurred -->
+ <errorHandler id="txEH" type="TransactionErrorHandler"
rollbackLoggingLevel="ERROR">
<redeliveryPolicy logStackTrace="false" logExhausted="false"/>
</errorHandler>
Modified:
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java?rev=1239046&r1=1239045&r2=1239046&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
(original)
+++
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java
Wed Feb 1 10:46:03 2012
@@ -42,6 +42,8 @@ public class ErrorHandlerDefinition exte
@XmlAttribute
private LoggingLevel level = LoggingLevel.ERROR;
@XmlAttribute
+ private LoggingLevel rollbackLoggingLevel = LoggingLevel.WARN;
+ @XmlAttribute
private String logName;
@XmlAttribute
private Boolean useOriginalMessage;
@@ -60,5 +62,4 @@ public class ErrorHandlerDefinition exte
@XmlElement
private RedeliveryPolicyDefinition redeliveryPolicy;
-
}
Modified:
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java?rev=1239046&r1=1239045&r2=1239046&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
(original)
+++
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java
Wed Feb 1 10:46:03 2012
@@ -102,7 +102,6 @@ public class ErrorHandlerDefinitionParse
parserRefAttribute(element, "onRetryWhileRef", "onRetryWhile",
builder);
parserRefAttribute(element, "redeliveryPolicyRef",
"redeliveryPolicy", builder);
if (type.equals(ErrorHandlerType.TransactionErrorHandler)) {
- // deal with transactionTemplateRef
parserRefAttribute(element, "transactionTemplateRef",
"transactionTemplate", builder);
parserRefAttribute(element, "transactionManagerRef",
"transactionManager", builder);
}
@@ -125,6 +124,11 @@ public class ErrorHandlerDefinitionParse
throw new IllegalArgumentException("Attribute
transactionManagerRef can only be used if type is "
+ ErrorHandlerType.TransactionErrorHandler.name() + ", in
error handler with id: " + id);
}
+ String rollbackLoggingLevel =
element.getAttribute("rollbackLoggingLevel");
+ if (ObjectHelper.isNotEmpty(rollbackLoggingLevel) &&
(!type.equals(ErrorHandlerType.TransactionErrorHandler))) {
+ throw new IllegalArgumentException("Attribute rollbackLoggingLevel
can only be used if type is "
+ + ErrorHandlerType.TransactionErrorHandler.name() + ", in
error handler with id: " + id);
+ }
String useOriginalMessage = element.getAttribute("useOriginalMessage");
if (ObjectHelper.isNotEmpty(useOriginalMessage) &&
(type.equals(ErrorHandlerType.LoggingErrorHandler) ||
type.equals(ErrorHandlerType.NoErrorHandler))) {
throw new IllegalArgumentException("Attribute useOriginalMessage
is not supported by error handler type: "
Modified:
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java?rev=1239046&r1=1239045&r2=1239046&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java
(original)
+++
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java
Wed Feb 1 10:46:03 2012
@@ -19,6 +19,7 @@ package org.apache.camel.spring.spi;
import org.apache.camel.AsyncCallback;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
+import org.apache.camel.LoggingLevel;
import org.apache.camel.Predicate;
import org.apache.camel.Processor;
import org.apache.camel.processor.RedeliveryErrorHandler;
@@ -42,6 +43,7 @@ public class TransactionErrorHandler ext
private final TransactionTemplate transactionTemplate;
private final String transactionKey;
+ private final LoggingLevel rollbackLoggingLevel;
/**
* Creates the transaction error handler.
@@ -55,14 +57,17 @@ public class TransactionErrorHandler ext
* @param transactionTemplate the transaction template
* @param retryWhile retry while
* @param executorServiceRef reference to a {@link
java.util.concurrent.ScheduledExecutorService} to be used for redelivery thread
pool. Can be <tt>null</tt>.
+ * @param rollbackLoggingLevel logging level to use for logging
transaction rollback occurred
*/
public TransactionErrorHandler(CamelContext camelContext, Processor
output, CamelLogger logger,
Processor redeliveryProcessor, RedeliveryPolicy redeliveryPolicy,
ExceptionPolicyStrategy exceptionPolicyStrategy,
- TransactionTemplate transactionTemplate, Predicate retryWhile,
String executorServiceRef) {
+ TransactionTemplate transactionTemplate, Predicate retryWhile,
String executorServiceRef,
+ LoggingLevel rollbackLoggingLevel) {
super(camelContext, output, logger, redeliveryProcessor,
redeliveryPolicy, null, null, false, retryWhile, executorServiceRef);
setExceptionPolicy(exceptionPolicyStrategy);
this.transactionTemplate = transactionTemplate;
+ this.rollbackLoggingLevel = rollbackLoggingLevel;
this.transactionKey =
ObjectHelper.getIdentityHashCode(transactionTemplate);
}
@@ -136,8 +141,8 @@ public class TransactionErrorHandler ext
log.debug("Transaction rollback ({}) redelivered({}) for {}
due exchange was marked for rollbackOnly", new Object[]{transactionKey,
redelivered, ids});
}
} catch (Throwable e) {
- log.warn("Transaction rollback ({}) redelivered({}) for {} caught:
{}", new Object[]{transactionKey, redelivered, ids, e.getMessage()});
exchange.setException(e);
+ logTransactionRollback(redelivered, ids, e);
} finally {
// mark the end of this transaction boundary
exchange.getUnitOfWork().endTransactedBy(transactionKey);
@@ -146,6 +151,7 @@ public class TransactionErrorHandler ext
// if it was a local rollback only then remove its marker so outer
transaction wont see the marker
Boolean onlyLast = (Boolean)
exchange.removeProperty(Exchange.ROLLBACK_ONLY_LAST);
if (onlyLast != null && onlyLast) {
+ // we only want this logged at debug level
if (log.isDebugEnabled()) {
// log exception if there was a cause exception so we have the
stack trace
Exception cause = exchange.getException();
@@ -222,6 +228,25 @@ public class TransactionErrorHandler ext
});
}
+ /**
+ * Logs the transaction rollback
+ */
+ private void logTransactionRollback(String redelivered, String ids,
Throwable e) {
+ if (rollbackLoggingLevel == LoggingLevel.OFF) {
+ return;
+ } else if (rollbackLoggingLevel == LoggingLevel.ERROR &&
log.isErrorEnabled()) {
+ log.error("Transaction rollback ({}) redelivered({}) for {}
caught: {}", new Object[]{transactionKey, redelivered, ids, e.getMessage()});
+ } else if (rollbackLoggingLevel == LoggingLevel.WARN &&
log.isWarnEnabled()) {
+ log.warn("Transaction rollback ({}) redelivered({}) for {} caught:
{}", new Object[]{transactionKey, redelivered, ids, e.getMessage()});
+ } else if (rollbackLoggingLevel == LoggingLevel.INFO &&
log.isInfoEnabled()) {
+ log.info("Transaction rollback ({}) redelivered({}) for {} caught:
{}", new Object[]{transactionKey, redelivered, ids, e.getMessage()});
+ } else if (rollbackLoggingLevel == LoggingLevel.DEBUG &&
log.isDebugEnabled()) {
+ log.debug("Transaction rollback ({}) redelivered({}) for {}
caught: {}", new Object[]{transactionKey, redelivered, ids, e.getMessage()});
+ } else if (rollbackLoggingLevel == LoggingLevel.TRACE &&
log.isTraceEnabled()) {
+ log.trace("Transaction rollback ({}) redelivered({}) for {}
caught: {}", new Object[]{transactionKey, redelivered, ids, e.getMessage()});
+ }
+ }
+
private static String propagationBehaviorToString(int propagationBehavior)
{
String rc;
switch (propagationBehavior) {
Modified:
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java?rev=1239046&r1=1239045&r2=1239046&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java
(original)
+++
camel/branches/camel-2.9.x/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java
Wed Feb 1 10:46:03 2012
@@ -40,6 +40,7 @@ public class TransactionErrorHandlerBuil
private static final transient Logger LOG =
LoggerFactory.getLogger(TransactionErrorHandlerBuilder.class);
private static final String PROPAGATION_REQUIRED = "PROPAGATION_REQUIRED";
private TransactionTemplate transactionTemplate;
+ private LoggingLevel rollbackLoggingLevel = LoggingLevel.WARN;
public TransactionErrorHandlerBuilder() {
// no-arg constructor used by Spring DSL
@@ -108,7 +109,7 @@ public class TransactionErrorHandlerBuil
TransactionErrorHandler answer = new
TransactionErrorHandler(routeContext.getCamelContext(), processor,
getLogger(), getOnRedelivery(), getRedeliveryPolicy(),
getExceptionPolicyStrategy(), transactionTemplate,
- getRetryWhilePolicy(routeContext.getCamelContext()),
getExecutorServiceRef());
+ getRetryWhilePolicy(routeContext.getCamelContext()),
getExecutorServiceRef(), getRollbackLoggingLevel());
// configure error handler before we can use it
configure(routeContext, answer);
return answer;
@@ -126,9 +127,39 @@ public class TransactionErrorHandlerBuil
this.transactionTemplate = new TransactionTemplate(transactionManager);
}
+ public LoggingLevel getRollbackLoggingLevel() {
+ return rollbackLoggingLevel;
+ }
+
+ /**
+ * Sets the logging level to use for logging transactional rollback.
+ * <p/>
+ * This option is default WARN.
+ *
+ * @param rollbackLoggingLevel the logging level
+ */
+ public void setRollbackLoggingLevel(LoggingLevel rollbackLoggingLevel) {
+ this.rollbackLoggingLevel = rollbackLoggingLevel;
+ }
+
// Builder methods
//
-------------------------------------------------------------------------
+ /**
+ * Sets the logging level to use for logging transactional rollback.
+ * <p/>
+ * This option is default WARN.
+ *
+ * @param rollbackLoggingLevel the logging level
+ */
+ public TransactionErrorHandlerBuilder rollbackLoggingLevel(LoggingLevel
rollbackLoggingLevel) {
+ setRollbackLoggingLevel(rollbackLoggingLevel);
+ return this;
+ }
+
+ // Implementation
+ //
-------------------------------------------------------------------------
+
protected CamelLogger createLogger() {
return new
CamelLogger(LoggerFactory.getLogger(TransactionErrorHandler.class),
LoggingLevel.ERROR);
}