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 2013/01/21 13:44:29 UTC
svn commit: r1436312 - in /camel/branches/camel-2.10.x: ./
camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
Author: davsclaus
Date: Mon Jan 21 12:44:29 2013
New Revision: 1436312
URL: http://svn.apache.org/viewvc?rev=1436312&view=rev
Log:
CAMEL-5748: direct-vm component should favor using their own application context class loader to avoid using class loaders from other Camel apps.
Modified:
camel/branches/camel-2.10.x/ (props changed)
camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
Merged /camel/trunk:r1436308
Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java?rev=1436312&r1=1436311&r2=1436312&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java (original)
+++ camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java Mon Jan 21 12:44:29 2013
@@ -20,12 +20,15 @@ import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.processor.DelegateProcessor;
import org.apache.camel.util.ExchangeHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
*
*/
public final class DirectVmProcessor extends DelegateProcessor {
+ private static final transient Logger LOG = LoggerFactory.getLogger(DirectVmProcessor.class);
private final DirectVmEndpoint endpoint;
public DirectVmProcessor(Processor processor, DirectVmEndpoint endpoint) {
@@ -37,11 +40,26 @@ public final class DirectVmProcessor ext
public void process(Exchange exchange) throws Exception {
// need to use a copy of the incoming exchange, so we route using this camel context
Exchange copy = prepareExchange(exchange);
+
+ ClassLoader current = Thread.currentThread().getContextClassLoader();
+ boolean changed = false;
try {
+ // set TCCL to application context class loader if given
+ ClassLoader appClassLoader = endpoint.getCamelContext().getApplicationContextClassLoader();
+ if (appClassLoader != null) {
+ LOG.trace("Setting Thread ContextClassLoader to {}", appClassLoader);
+ Thread.currentThread().setContextClassLoader(appClassLoader);
+ changed = true;
+ }
getProcessor().process(copy);
} finally {
// make sure to copy results back
ExchangeHelper.copyResults(exchange, copy);
+ // restore TCCL if it was changed during processing
+ if (changed) {
+ LOG.trace("Restoring Thread ContextClassLoader to {}", current);
+ Thread.currentThread().setContextClassLoader(current);
+ }
}
}