WIP

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8c97cad0
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8c97cad0
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8c97cad0

Branch: refs/heads/camel-hystrix
Commit: 8c97cad0e837d3e1bf4d1d38113b27bd8616f679
Parents: eab6bca
Author: Raul Kripalani <ra...@apache.org>
Authored: Sun Feb 16 17:36:45 2014 +0000
Committer: Raul Kripalani <ra...@apache.org>
Committed: Sun Feb 16 17:36:45 2014 +0000

----------------------------------------------------------------------
 .../camel/processor/CamelLogProcessor.java      | 10 ++++++-
 .../java/org/apache/camel/util/CamelLogger.java | 30 ++++++++++++++++----
 .../org/apache/camel/util/ObjectHelper.java     | 27 ++++++++++++++++++
 parent/pom.xml                                  |  1 +
 4 files changed, 61 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8c97cad0/camel-core/src/main/java/org/apache/camel/processor/CamelLogProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/CamelLogProcessor.java 
b/camel-core/src/main/java/org/apache/camel/processor/CamelLogProcessor.java
index 052d1e7..521ce9c 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/CamelLogProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/CamelLogProcessor.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.processor;
 
+import java.util.concurrent.Callable;
+
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Exchange;
@@ -24,6 +26,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.util.AsyncProcessorHelper;
 import org.apache.camel.util.CamelLogger;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * A {@link Processor} which just logs to a {@link CamelLogger} object which 
can be used
@@ -39,7 +42,12 @@ public class CamelLogProcessor implements AsyncProcessor {
     private ExchangeFormatter formatter;
 
     public CamelLogProcessor() {
-        this(new CamelLogger(CamelLogProcessor.class.getName()));
+        this(ObjectHelper.runWithClassLoader(null, new Callable<CamelLogger>() 
{
+            @Override
+            public CamelLogger call() throws Exception {
+                return new CamelLogger(CamelLogProcessor.class.getName());
+            }
+        }));
     }
     
     public CamelLogProcessor(CamelLogger log) {

http://git-wip-us.apache.org/repos/asf/camel/blob/8c97cad0/camel-core/src/main/java/org/apache/camel/util/CamelLogger.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/CamelLogger.java 
b/camel-core/src/main/java/org/apache/camel/util/CamelLogger.java
index 1787bd7..96773f0 100644
--- a/camel-core/src/main/java/org/apache/camel/util/CamelLogger.java
+++ b/camel-core/src/main/java/org/apache/camel/util/CamelLogger.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.util;
 
+import java.util.concurrent.Callable;
+
 import org.apache.camel.LoggingLevel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,7 +38,12 @@ public class CamelLogger {
     private Marker marker;
 
     public CamelLogger() {
-        this(LoggerFactory.getLogger(CamelLogger.class));
+        this(ObjectHelper.runWithClassLoader(null, new Callable<Logger>() {
+            @Override
+            public Logger call() throws Exception {
+                return LoggerFactory.getLogger(CamelLogger.class);
+            }
+        }));
     }
 
     public CamelLogger(Logger log) {
@@ -53,16 +60,27 @@ public class CamelLogger {
         setMarker(marker);
     }
 
-    public CamelLogger(String logName) {
-        this(LoggerFactory.getLogger(logName));
+    public CamelLogger(final String logName) {
+        this(ObjectHelper.runWithClassLoader(null, new Callable<Logger>() {
+            @Override
+            public Logger call() throws Exception {
+                return LoggerFactory.getLogger(logName);
+            }
+        }));
     }
 
-    public CamelLogger(String logName, LoggingLevel level) {
+    public CamelLogger(final String logName, final LoggingLevel level) {
         this(logName, level, null);
     }
 
-    public CamelLogger(String logName, LoggingLevel level, String marker) {
-        this(LoggerFactory.getLogger(logName), level, marker);
+    public CamelLogger(final String logName, final LoggingLevel level, final 
String marker) {
+        this(ObjectHelper.runWithClassLoader(null, new Callable<Logger>() {
+            @Override
+            public Logger call() throws Exception {
+                return LoggerFactory.getLogger(logName);
+            }
+        }), level, marker);
+        
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/8c97cad0/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java 
b/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
index 2b0827a..97b510b 100644
--- a/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
@@ -42,6 +42,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Scanner;
+import java.util.concurrent.Callable;
 
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -1528,6 +1529,32 @@ public final class ObjectHelper {
         return value.equals(Float.NaN) || value.equals(Double.NaN);
     }
 
+    /**
+     * Runs a piece of code with a different classloader, remembering the old 
classloader and 
+     * restoring it prior to returning. If the Callable throws an exception, 
it will be wrapped
+     * in a {@link RuntimeCamelException} prior to rethrowing it.
+     * 
+     * @param classLoader ClassLoader to run the logic with
+     * @param callable the logic to run with the supplied ClassLoader
+     * @return the result from running the {@link Callable}
+     */
+    public static <T> T runWithClassLoader(final ClassLoader classLoader, 
final Callable<T> callable) throws RuntimeCamelException {
+        if (classLoader == null || callable == null) {
+            throw new IllegalArgumentException("Neither Classloader or 
Callable can be null");
+        }
+        
+        final ClassLoader oldClassLoader = 
Thread.currentThread().getContextClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(classLoader);
+            return callable.call();
+        } catch (Exception e) {
+            throw new RuntimeCamelException(e);
+        }
+        finally {
+            Thread.currentThread().setContextClassLoader(oldClassLoader);
+        }
+}       
+
     private static final class ExceptionIterator implements 
Iterator<Throwable> {
         private List<Throwable> tree = new ArrayList<Throwable>();
         private Iterator<Throwable> it;

http://git-wip-us.apache.org/repos/asf/camel/blob/8c97cad0/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index cb05bb8..2517848 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -181,6 +181,7 @@
     <httpcore4-version>4.3</httpcore4-version>
     <httpclient4-version>4.3.1</httpclient4-version>
     <httpclient-version>3.1</httpclient-version> 
+    <hystrix-version>1.3.8</hystrix-version> 
     <ibatis-bundle-version>2.3.4.726_4</ibatis-bundle-version>
     <ibatis-version>2.3.4.726</ibatis-version>
     <ical4j-version>1.0.5.2</ical4j-version>

Reply via email to