From e5b7380c874745c989d1816b8f552504f038e1bc Mon Sep 17 00:00:00 2001 From: lresende Date: Thu, 26 Sep 2013 20:33:20 +0000 Subject: 2.0 branch for possible maintenance release git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1526672 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/client/impl/DefaultEndpointFinder.java | 79 +++++++ .../tuscany/sca/client/impl/EndpointFinder.java | 28 +++ .../client/impl/OnlySCABindingEndpointFinder.java | 28 +++ .../impl/RemoteServiceInvocationHandler.java | 246 +++++++++++++++++++++ .../tuscany/sca/client/impl/RuntimeUtils.java | 93 ++++++++ .../client/impl/SCAClientFactoryFinderImpl.java | 49 ++++ .../sca/client/impl/SCAClientFactoryImpl.java | 127 +++++++++++ .../sca/client/impl/SCAClientModuleActivator.java | 36 +++ 8 files changed, 686 insertions(+) create mode 100644 sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/DefaultEndpointFinder.java create mode 100644 sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/EndpointFinder.java create mode 100644 sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/OnlySCABindingEndpointFinder.java create mode 100644 sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RemoteServiceInvocationHandler.java create mode 100644 sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java create mode 100644 sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java create mode 100644 sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java create mode 100644 sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java (limited to 'sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca') diff --git a/sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/DefaultEndpointFinder.java b/sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/DefaultEndpointFinder.java new file mode 100644 index 0000000000..a98b6e93cc --- /dev/null +++ b/sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/DefaultEndpointFinder.java @@ -0,0 +1,79 @@ +/* + * 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.Iterator; +import java.util.List; + +import org.apache.tuscany.sca.assembly.ComponentService; +import org.apache.tuscany.sca.assembly.Endpoint; +import org.apache.tuscany.sca.assembly.SCABinding; +import org.apache.tuscany.sca.runtime.DomainRegistry; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.ServiceRuntimeException; + +public class DefaultEndpointFinder implements EndpointFinder { + + protected boolean onlySCABinding; + + @Override + public Endpoint findEndpoint(DomainRegistry domainRegistry, String serviceName) throws NoSuchServiceException { + List eps = domainRegistry.findEndpoint(serviceName); + if (eps == null || eps.size() < 1) { + throw new NoSuchServiceException(serviceName); + } + + // remove any callback services from the array as we aren't + // expecting SCA clients to connect to callback service + Iterator iterator = eps.iterator(); + while (iterator.hasNext()){ + Endpoint ep = iterator.next(); + if (ep.getService().isForCallback()){ + iterator.remove(); + } + } + + // If lookup is by component name only and there are multiple matches, verify all matches + // are from the same service. Otherwise it is ambiguous which service the client wants. + if (serviceName.indexOf('/') == -1 && eps.size() > 1) { + ComponentService firstService = eps.get(0).getService(); + for (int i=1; i 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); + + EndpointFinder endpointFinder = RuntimeUtils.getEndpointFinder(extensionsRegistry); + Endpoint endpoint = endpointFinder.findEndpoint(domainRegistry, serviceName); + + 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/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java b/sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java new file mode 100644 index 0000000000..bb84d93b11 --- /dev/null +++ b/sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/RuntimeUtils.java @@ -0,0 +1,93 @@ +/* + * 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.DomainRegistry; +import org.apache.tuscany.sca.runtime.DomainRegistryFactory; +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); + } + } + + public static EndpointFinder getEndpointFinder(ExtensionPointRegistry registry) { + EndpointFinder endpointFinder = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(EndpointFinder.class); + if (endpointFinder == null) { + endpointFinder = new DefaultEndpointFinder(); + } + return endpointFinder; + } +} diff --git a/sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java b/sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java new file mode 100644 index 0000000000..733b01ddc1 --- /dev/null +++ b/sca-java-2.x/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl.java @@ -0,0 +1,127 @@ +/* + * 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.Properties; + +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; + protected boolean onlySCABinding; + private EndpointFinder endpointFinder; + + 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(); + + endpointFinder = RuntimeUtils.getEndpointFinder(extensionPointRegistry); + } + + public SCAClientFactoryImpl(URI domainURI, Properties properties) throws NoSuchDomainException { + this(domainURI); + } + + 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 getService(Class serviceInterface, String serviceURI) throws NoSuchServiceException{ + + // The service is a component in a local runtime + if (!remoteClient) { + Endpoint ep = endpointFinder.findEndpoint(domainRegistry, serviceURI); + if (((RuntimeComponent)ep.getComponent()).getComponentContext() != null) { + String serviceName = ep.getService().getName() + '/' + ep.getBinding().getName(); + 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 + // TUSCANY-3590 - convert NoSuchDomainException to NoSuchService exception while + // we findout why this interface has changed + try { + handler = new RemoteServiceInvocationHandler(extensionPointRegistry, domainRegistry, getDomainURI().toString(), serviceURI, serviceInterface); + } catch (NoSuchDomainException ex){ + throw new NoSuchServiceException(ex); + } + } + if (serviceInterface == null) { + serviceInterface = (Class)((RemoteServiceInvocationHandler)handler).serviceInterface; + } + + 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/branches/2.0/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientModuleActivator.java b/sca-java-2.x/branches/2.0/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/branches/2.0/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() { + + } +} -- cgit v1.2.3