From 1ced0ad3ca56a0a9584e5844c0fb2db73fd50aa3 Mon Sep 17 00:00:00 2001 From: antelder Date: Mon, 18 Jul 2011 12:44:07 +0000 Subject: TUSCANY-3896: Apply patch from Greg Dritschler for Enable subclassing of SCAClientFactoryImpl git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1147839 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/client/impl/SCAClientFactoryImpl.java | 23 +++++++++++++++++----- .../sca/client/impl/SCAClientModuleActivator.java | 5 ++++- 2 files changed, 22 insertions(+), 6 deletions(-) (limited to 'sca-java-2.x/trunk/modules/sca-client-impl/src/main/java') diff --git a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java index ce148438eb..7c4afb2660 100644 --- a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java +++ b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java @@ -22,6 +22,8 @@ package org.apache.tuscany.sca.client.impl; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.net.URI; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.List; import org.apache.tuscany.sca.assembly.Endpoint; @@ -37,12 +39,16 @@ import org.oasisopen.sca.client.SCAClientFactoryFinder; public class SCAClientFactoryImpl extends SCAClientFactory { - private ExtensionPointRegistry extensionPointRegistry; - private DomainRegistry domainRegistry; - private boolean remoteClient; + protected ExtensionPointRegistry extensionPointRegistry; + protected DomainRegistry domainRegistry; + protected boolean remoteClient; public static URI default_domainURI = URI.create("default"); + public static SCAClientFactoryFinder getSCAClientFactoryFinder() { + return SCAClientFactory.factoryFinder; + } + public static void setSCAClientFactoryFinder(SCAClientFactoryFinder factoryFinder) { SCAClientFactory.factoryFinder = factoryFinder; } @@ -52,7 +58,7 @@ public class SCAClientFactoryImpl extends SCAClientFactory { findLocalRuntime(); } - private void findLocalRuntime() throws NoSuchDomainException { + protected void findLocalRuntime() throws NoSuchDomainException { String domainURI = getDomainURI().toString(); for (ExtensionPointRegistry xpr : ExtensionPointRegistryLocator.getExtensionPointRegistries()) { ExtensibleDomainRegistryFactory drf = ExtensibleDomainRegistryFactory.getInstance(xpr); @@ -105,6 +111,13 @@ public class SCAClientFactoryImpl extends SCAClientFactory { serviceInterface = (Class)((RemoteServiceInvocationHandler)handler).serviceInterface; } - return (T)Proxy.newProxyInstance(serviceInterface.getClassLoader(), new Class[]{serviceInterface}, handler); + final Class _serviceInterface = serviceInterface; + ClassLoader cl = AccessController.doPrivileged(new PrivilegedAction() { + public ClassLoader run() { + return _serviceInterface.getClassLoader(); + } + }); + + return (T)Proxy.newProxyInstance(cl, new Class[]{serviceInterface}, handler); } } diff --git a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java index 0cf41e071c..d2fdbc302d 100644 --- a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java +++ b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java @@ -24,7 +24,10 @@ import org.apache.tuscany.sca.core.ModuleActivator; public class SCAClientModuleActivator implements ModuleActivator { public void start() { - SCAClientFactoryImpl.setSCAClientFactoryFinder(new SCAClientFactoryFinderImpl()); + // Do not replace the finder if it's already been set by some other means + if (SCAClientFactoryImpl.getSCAClientFactoryFinder() == null) { + SCAClientFactoryImpl.setSCAClientFactoryFinder(new SCAClientFactoryFinderImpl()); + } } public void stop() { -- cgit v1.2.3