diff options
author | antelder <antelder@13f79535-47bb-0310-9956-ffa450edef68> | 2011-07-28 14:02:47 +0000 |
---|---|---|
committer | antelder <antelder@13f79535-47bb-0310-9956-ffa450edef68> | 2011-07-28 14:02:47 +0000 |
commit | 4b11f63d0b9e2a72e019c3a3d603dc9521261e08 (patch) | |
tree | c56414fc474e1c6b3a40e930c6e6adfd7d5b3cf0 /sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache | |
parent | 3f019b6ccbcd0ab32f10b728d8bf49616a217f91 (diff) |
Tag 2.0-Beta3 RC2
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1151853 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache')
5 files changed, 543 insertions, 0 deletions
diff --git a/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java new file mode 100644 index 0000000000..7b75943fc3 --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java @@ -0,0 +1,250 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.client.impl; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.List; + +import org.apache.tuscany.sca.assembly.AssemblyFactory; +import org.apache.tuscany.sca.assembly.Component; +import org.apache.tuscany.sca.assembly.ComponentReference; +import org.apache.tuscany.sca.assembly.ComponentService; +import org.apache.tuscany.sca.assembly.Endpoint; +import org.apache.tuscany.sca.assembly.EndpointReference; +import org.apache.tuscany.sca.assembly.Multiplicity; +import org.apache.tuscany.sca.assembly.Service; +import org.apache.tuscany.sca.context.CompositeContext; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; +import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory; +import org.apache.tuscany.sca.core.invocation.ProxyFactory; +import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint; +import org.apache.tuscany.sca.interfacedef.Interface; +import org.apache.tuscany.sca.interfacedef.InterfaceContract; +import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; +import org.apache.tuscany.sca.interfacedef.java.JavaInterface; +import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; +import org.apache.tuscany.sca.runtime.DomainRegistry; +import org.apache.tuscany.sca.runtime.ContributionDescription; +import org.apache.tuscany.sca.runtime.RuntimeComponent; +import org.apache.tuscany.sca.runtime.RuntimeComponentReference; +import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.ServiceRuntimeException; + +/** + * An InvocationHandler for invoking services where the component is not running locally. + * It has two modes of operation for the cases where there either is or is not an existing + * Tuscany runtime locally. The SCAClient API has no close so when there is no existing + * local runtime then one must be created and destroyed for each service invocation. + */ +public class RemoteServiceInvocationHandler implements InvocationHandler { + + private String domainURI; + private String serviceName; + public Class<?> serviceInterface; + + private ExtensionPointRegistry extensionsRegistry; + private DomainRegistry domainRegistry; + + private InvocationHandler handler; + private boolean reuse; + + /** + * Constructor for when there is an existing Tuscany runtime for the domain + */ + public RemoteServiceInvocationHandler(ExtensionPointRegistry extensionsRegistry, DomainRegistry domainRegistry, String serviceName, Class<?> serviceInterface) { + this.extensionsRegistry = extensionsRegistry; + this.domainRegistry = domainRegistry; + this.domainURI = domainRegistry.getDomainURI(); + this.serviceName = serviceName; + this.serviceInterface = serviceInterface; + this.reuse = true; + } + + /** + * Constructor for when there is no existing Tuscany runtime for the domain + * @param endpointRegistry2 + * @param extensionPointRegistry + * @throws NoSuchServiceException + */ + public RemoteServiceInvocationHandler(ExtensionPointRegistry extensionsRegistry, DomainRegistry domainRegistry, String domainURI, String serviceName, Class<?> serviceInterface) throws NoSuchDomainException, NoSuchServiceException { + this.extensionsRegistry = extensionsRegistry; + this.domainRegistry = domainRegistry; + this.domainURI = domainURI; + this.serviceName = serviceName; + this.serviceInterface = serviceInterface; + this.reuse = false; + if (serviceInterface == null) { + getHandler(); + } + } + + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + try { + + return getHandler().invoke(proxy, method, args); + + } finally { + if (!reuse) { + extensionsRegistry.stop(); + extensionsRegistry = null; + handler = null; + } + } + } + + private InvocationHandler getHandler() throws NoSuchDomainException, NoSuchServiceException { + if (handler == null) { + if (extensionsRegistry == null) { + extensionsRegistry = RuntimeUtils.createExtensionPointRegistry(); + } + if (domainRegistry == null) { + domainRegistry = RuntimeUtils.getClientEndpointRegistry(extensionsRegistry, domainURI); + } + + FactoryExtensionPoint factories = extensionsRegistry.getExtensionPoint(FactoryExtensionPoint.class); + AssemblyFactory assemblyFactory = factories.getFactory(AssemblyFactory.class); + JavaInterfaceFactory javaInterfaceFactory = factories.getFactory(JavaInterfaceFactory.class); + ProxyFactory proxyFactory = new ExtensibleProxyFactory(extensionsRegistry.getExtensionPoint(ProxyFactoryExtensionPoint.class)); + + CompositeContext compositeContext = new CompositeContext(extensionsRegistry, domainRegistry, null, domainURI, null, null); + + List<Endpoint> eps = domainRegistry.findEndpoint(serviceName); + if (eps == null || eps.size() < 1) { + throw new NoSuchServiceException(serviceName); + } + Endpoint endpoint = eps.get(0); // TODO: what should be done with multiple endpoints? + + if (serviceInterface == null) { + try { + findInterface(endpoint); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + RuntimeEndpointReference epr; + try { + epr = createEndpointReference(javaInterfaceFactory, compositeContext, assemblyFactory, endpoint, serviceInterface); + } catch (Exception e) { + throw new ServiceRuntimeException(e); + } + + this.handler = Proxy.getInvocationHandler(proxyFactory.createProxy(serviceInterface, epr)); + } + return handler; + } + + private void findInterface(Endpoint endpoint) throws MalformedURLException, ClassNotFoundException { + Interface iface = endpoint.getService().getInterfaceContract().getInterface(); + if (iface instanceof JavaInterface) { + String curi = domainRegistry.getContainingCompositesContributionURI(endpoint.getComponent().getName()); + if (curi != null) { + ContributionDescription ic = domainRegistry.getInstalledContribution(curi); + ClassLoader cl = new URLClassLoader(new URL[]{new URL(ic.getURL())}); + serviceInterface = cl.loadClass(((JavaInterface)iface).getName()); + } + } + } + + private RuntimeEndpointReference createEndpointReference(JavaInterfaceFactory javaInterfaceFactory, CompositeContext compositeContext, AssemblyFactory assemblyFactory, Endpoint endpoint, Class<?> businessInterface) throws CloneNotSupportedException, InvalidInterfaceException { + Component component = endpoint.getComponent(); + ComponentService service = endpoint.getService(); + ComponentReference componentReference = assemblyFactory.createComponentReference(); + componentReference.setName("sca.client." + service.getName()); + + componentReference.setCallback(service.getCallback()); + componentReference.getTargets().add(service); + componentReference.getPolicySets().addAll(service.getPolicySets()); + componentReference.getRequiredIntents().addAll(service.getRequiredIntents()); + componentReference.getBindings().add(endpoint.getBinding()); + + InterfaceContract interfaceContract = service.getInterfaceContract(); + Service componentTypeService = service.getService(); + if (componentTypeService != null && componentTypeService.getInterfaceContract() != null) { + interfaceContract = componentTypeService.getInterfaceContract(); + } + interfaceContract = getInterfaceContract(javaInterfaceFactory, interfaceContract, businessInterface); + componentReference.setInterfaceContract(interfaceContract); + componentReference.setMultiplicity(Multiplicity.ONE_ONE); + // component.getReferences().add(componentReference); + + // create endpoint reference + EndpointReference endpointReference = assemblyFactory.createEndpointReference(); + endpointReference.setComponent(component); + endpointReference.setReference(componentReference); + endpointReference.setBinding(endpoint.getBinding()); + endpointReference.setUnresolved(false); + endpointReference.setStatus(EndpointReference.Status.WIRED_TARGET_FOUND_AND_MATCHED); + + endpointReference.setTargetEndpoint(endpoint); + + componentReference.getEndpointReferences().add(endpointReference); + ((RuntimeComponentReference)componentReference).setComponent((RuntimeComponent)component); + ((RuntimeEndpointReference)endpointReference).bind(compositeContext); + + return (RuntimeEndpointReference) endpointReference; + } + + /** + * @param interfaceContract + * @param businessInterface + * @return + * @throws CloneNotSupportedException + * @throws InvalidInterfaceException + */ + private InterfaceContract getInterfaceContract(JavaInterfaceFactory javaInterfaceFactory, InterfaceContract interfaceContract, Class<?> businessInterface) + throws CloneNotSupportedException, InvalidInterfaceException { + if (businessInterface == null) { + return interfaceContract; + } + boolean compatible = false; + if (interfaceContract != null && interfaceContract.getInterface() != null) { + Interface interfaze = interfaceContract.getInterface(); + if (interfaze instanceof JavaInterface) { + Class<?> cls = ((JavaInterface)interfaze).getJavaClass(); + if (cls != null && businessInterface.isAssignableFrom(cls)) { + compatible = true; + } + } + } + + if (!compatible) { + // The interface is not assignable from the interface contract + interfaceContract = javaInterfaceFactory.createJavaInterfaceContract(); + JavaInterface callInterface = javaInterfaceFactory.createJavaInterface(businessInterface); + interfaceContract.setInterface(callInterface); + if (callInterface.getCallbackClass() != null) { + interfaceContract.setCallbackInterface(javaInterfaceFactory.createJavaInterface(callInterface + .getCallbackClass())); + } + } + + return interfaceContract; + } + +} diff --git a/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java new file mode 100644 index 0000000000..4e7479809f --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.client.impl; + +import java.util.Properties; + +import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; +import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint; +import org.apache.tuscany.sca.core.UtilityExtensionPoint; +import org.apache.tuscany.sca.core.assembly.RuntimeAssemblyFactory; +import org.apache.tuscany.sca.runtime.DomainRegistryFactory; +import org.apache.tuscany.sca.runtime.DomainRegistry; +import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory; +import org.apache.tuscany.sca.runtime.RuntimeProperties; +import org.apache.tuscany.sca.work.WorkScheduler; +import org.oasisopen.sca.NoSuchDomainException; + +public class RuntimeUtils { + + public static ExtensionPointRegistry createExtensionPointRegistry() throws NoSuchDomainException { + ExtensionPointRegistry extensionsRegistry = new DefaultExtensionPointRegistry(); + extensionsRegistry.start(); + + FactoryExtensionPoint modelFactories = extensionsRegistry.getExtensionPoint(FactoryExtensionPoint.class); + RuntimeAssemblyFactory assemblyFactory = new RuntimeAssemblyFactory(extensionsRegistry); + modelFactories.addFactory(assemblyFactory); + + UtilityExtensionPoint utilities = extensionsRegistry.getExtensionPoint(UtilityExtensionPoint.class); + + Properties domainConfigProps = new Properties(); + domainConfigProps.setProperty("client", "true"); + utilities.getUtility(RuntimeProperties.class).setProperties(domainConfigProps); + + // TODO: is this needed? + utilities.getUtility(WorkScheduler.class); + + // Initialize the Tuscany module activators + // The module activators will be started + extensionsRegistry.getExtensionPoint(ModuleActivatorExtensionPoint.class); + + return extensionsRegistry; + } + + public static DomainRegistry getClientEndpointRegistry(ExtensionPointRegistry extensionsRegistry, String domainURI) throws NoSuchDomainException { + DomainRegistryFactory domainRegistryFactory = ExtensibleDomainRegistryFactory.getInstance(extensionsRegistry); + + String registryURI = domainURI; + + // TODO: theres better ways to do this but this gets things working for now + if (registryURI.indexOf(":") == -1) { + registryURI = "tuscanyclient:" + registryURI; + } + if (registryURI.startsWith("uri:")) { + registryURI = "tuscanyclient:" + registryURI.substring(4); + } + if (registryURI.startsWith("tuscany:")) { + registryURI = "tuscanyclient:" + registryURI.substring(8); + } + + try { + return domainRegistryFactory.getEndpointRegistry(registryURI, domainURI); + } catch (Exception e) { + throw new NoSuchDomainException(domainURI, e); + } + } +} diff --git a/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java new file mode 100644 index 0000000000..c06384a6cb --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java @@ -0,0 +1,49 @@ +/* + * Copyright(C) OASIS(R) 2005,2009. All Rights Reserved. + * OASIS trademark, IPR and other policies apply. + */ +package org.apache.tuscany.sca.client.impl; + +import java.net.URI; +import java.util.Properties; + +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.ServiceRuntimeException; +import org.oasisopen.sca.client.SCAClientFactory; +import org.oasisopen.sca.client.SCAClientFactoryFinder; + +/** + * A Tuscany specific implementation of an SCAClientFactoryFinder which finds + * hard codes the use of the Tuscany SCAClientFactory instead of doscovering it. + * + * @see SCAClientFactoryFinder + * @see SCAClientFactory + */ +public class SCAClientFactoryFinderImpl implements SCAClientFactoryFinder { + + /** + * Public Constructor + */ + public SCAClientFactoryFinderImpl() { + } + + /** + * Creates an instance of the SCAClientFactorySPI implementation. + * This discovers the SCAClientFactorySPI Implementation and instantiates + * the provider's implementation. + * + * @param properties Properties that may be used when creating a new + * instance of the SCAClient + * @param classLoader ClassLoader that may be used when creating a new + * instance of the SCAClient + * @return new instance of the SCAClientFactory + * @throws ServiceRuntimeException Failed to create SCAClientFactory + * Implementation. + */ + public SCAClientFactory find(Properties properties, + ClassLoader classLoader, + URI domainURI ) throws NoSuchDomainException, ServiceRuntimeException { + return new SCAClientFactoryImpl(domainURI); + } + +} diff --git a/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java new file mode 100644 index 0000000000..7c4afb2660 --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +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; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; +import org.apache.tuscany.sca.core.ExtensionPointRegistryLocator; +import org.apache.tuscany.sca.runtime.DomainRegistry; +import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory; +import org.apache.tuscany.sca.runtime.RuntimeComponent; +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.client.SCAClientFactory; +import org.oasisopen.sca.client.SCAClientFactoryFinder; + +public class SCAClientFactoryImpl extends SCAClientFactory { + + 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; + } + + public SCAClientFactoryImpl(URI domainURI) throws NoSuchDomainException { + super(domainURI == null ? default_domainURI : domainURI); + findLocalRuntime(); + } + + protected void findLocalRuntime() throws NoSuchDomainException { + String domainURI = getDomainURI().toString(); + for (ExtensionPointRegistry xpr : ExtensionPointRegistryLocator.getExtensionPointRegistries()) { + ExtensibleDomainRegistryFactory drf = ExtensibleDomainRegistryFactory.getInstance(xpr); + for (DomainRegistry epr : drf.getEndpointRegistries()) { + if (domainURI.equals(epr.getDomainName())) { + this.extensionPointRegistry = xpr; + this.domainRegistry = epr; + return; + } + } + } + + remoteClient = true; + extensionPointRegistry = RuntimeUtils.createExtensionPointRegistry(); + domainRegistry = RuntimeUtils.getClientEndpointRegistry(extensionPointRegistry, domainURI); + } + + @Override + public <T> T getService(Class<T> serviceInterface, String serviceURI) throws NoSuchServiceException, NoSuchDomainException { + + String serviceName = null; + if (serviceURI.contains("/")) { + int i = serviceURI.indexOf("/"); + if (i < serviceURI.length() - 1) { + serviceName = serviceURI.substring(i + 1); + } + } + + // The service is a component in a local runtime + if (!remoteClient) { + List<Endpoint> endpoints = domainRegistry.findEndpoint(serviceURI); + if (endpoints.size() < 1) { + throw new NoSuchServiceException(serviceURI); + } + Endpoint ep = endpoints.get(0); + if (((RuntimeComponent)ep.getComponent()).getComponentContext() != null) { + return ((RuntimeComponent)ep.getComponent()).getServiceReference(serviceInterface, serviceName).getService(); + } + } + + InvocationHandler handler; + if (!remoteClient) { + // There is a local runtime but the service is a remote component + handler = new RemoteServiceInvocationHandler(extensionPointRegistry, domainRegistry, serviceURI, serviceInterface); + } else { + // no local runtime + handler = new RemoteServiceInvocationHandler(extensionPointRegistry, domainRegistry, getDomainURI().toString(), serviceURI, serviceInterface); + } + if (serviceInterface == null) { + serviceInterface = (Class<T>)((RemoteServiceInvocationHandler)handler).serviceInterface; + } + + final Class _serviceInterface = serviceInterface; + ClassLoader cl = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { + public ClassLoader run() { + return _serviceInterface.getClassLoader(); + } + }); + + return (T)Proxy.newProxyInstance(cl, new Class[]{serviceInterface}, handler); + } +} diff --git a/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java new file mode 100644 index 0000000000..d2fdbc302d --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta3-RC2/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.client.impl; + +import org.apache.tuscany.sca.core.ModuleActivator; + +public class SCAClientModuleActivator implements ModuleActivator { + + public void start() { + // 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() { + + } +} |