From: Olivier Lamy Date: Fri, 10 Jun 2011 16:35:45 +0000 (+0000) Subject: use sisu container classloader as tccl during lookup X-Git-Tag: archiva-1.4-M1~684 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e6a1d209a2e5a3849ba5cd73d0b96254f5580759;p=archiva.git use sisu container classloader as tccl during lookup git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1134376 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridge.java b/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridge.java index e13f9b4bd..3a995697b 100644 --- a/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridge.java +++ b/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridge.java @@ -58,6 +58,8 @@ public class PlexusSisuBridge private URL overridingComponentsXml; + private ClassRealm containerRealm; + private DefaultPlexusContainer plexusContainer; @PostConstruct @@ -76,7 +78,7 @@ public class PlexusSisuBridge ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - ClassRealm classRealm = new ClassRealm( classWorld, "maven", tccl ); + containerRealm = new ClassRealm( classWorld, "maven", tccl ); // olamy hackhish but plexus-sisu need a URLClassLoader with URL filled @@ -85,11 +87,11 @@ public class PlexusSisuBridge URL[] urls = ( (URLClassLoader) tccl ).getURLs(); for ( URL url : urls ) { - classRealm.addURL( url ); + containerRealm.addURL( url ); } } - conf.setRealm( classRealm ); + conf.setRealm( containerRealm ); //conf.setClassWorld( classWorld ); @@ -97,13 +99,15 @@ public class PlexusSisuBridge try { - Thread.currentThread().setContextClassLoader( classRealm ); + Thread.currentThread().setContextClassLoader( containerRealm ); plexusContainer = new DefaultPlexusContainer( conf ); } catch ( PlexusContainerException e ) { throw new PlexusSisuBridgeException( e.getMessage(), e ); - } finally { + } + finally + { Thread.currentThread().setContextClassLoader( ori ); } } @@ -131,52 +135,79 @@ public class PlexusSisuBridge public T lookup( Class clazz ) throws PlexusSisuBridgeException { + ClassLoader ori = Thread.currentThread().getContextClassLoader(); try { + Thread.currentThread().setContextClassLoader( containerRealm ); return plexusContainer.lookup( clazz ); } catch ( ComponentLookupException e ) { throw new PlexusSisuBridgeException( e.getMessage(), e ); } + finally + { + Thread.currentThread().setContextClassLoader( ori ); + } } public T lookup( Class clazz, String hint ) throws PlexusSisuBridgeException { + ClassLoader ori = Thread.currentThread().getContextClassLoader(); + try { + Thread.currentThread().setContextClassLoader( containerRealm ); return plexusContainer.lookup( clazz, hint ); } catch ( ComponentLookupException e ) { throw new PlexusSisuBridgeException( e.getMessage(), e ); } + finally + { + Thread.currentThread().setContextClassLoader( ori ); + } } public List lookupList( Class clazz ) throws PlexusSisuBridgeException { + ClassLoader ori = Thread.currentThread().getContextClassLoader(); + try { + Thread.currentThread().setContextClassLoader( containerRealm ); return plexusContainer.lookupList( clazz ); } catch ( ComponentLookupException e ) { throw new PlexusSisuBridgeException( e.getMessage(), e ); } + finally + { + Thread.currentThread().setContextClassLoader( ori ); + } } public Map lookupMap( Class clazz ) throws PlexusSisuBridgeException { + ClassLoader ori = Thread.currentThread().getContextClassLoader(); + try { + Thread.currentThread().setContextClassLoader( containerRealm ); return plexusContainer.lookupMap( clazz ); } catch ( ComponentLookupException e ) { throw new PlexusSisuBridgeException( e.getMessage(), e ); } + finally + { + Thread.currentThread().setContextClassLoader( ori ); + } } }