From eae173ae0249bc8565139a2a5b25601a9977ac29 Mon Sep 17 00:00:00 2001 From: antelder Date: Mon, 21 Mar 2011 15:15:35 +0000 Subject: Start of getting the remote sca client working again. This works now but theres a lot of clean up needed git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1083823 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tuscany/sca/client/impl/Handler2.java | 280 +++++++++++++++++++++ .../client/impl/SCAClientFactoryFinderImpl.java | 2 +- .../sca/client/impl/SCAClientFactoryImpl2.java | 6 +- .../sca/client/impl/SCAClientFactoryImpl3.java | 74 ++++++ .../tuscany/sca/client/impl/SCAClientHandler.java | 124 +++++---- 5 files changed, 417 insertions(+), 69 deletions(-) create mode 100644 sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java create mode 100644 sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java (limited to 'sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany') diff --git a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java new file mode 100644 index 0000000000..16252ed94c --- /dev/null +++ b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java @@ -0,0 +1,280 @@ +/* + * 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.util.List; +import java.util.Properties; + +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.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.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.DomainRegistryFactory; +import org.apache.tuscany.sca.runtime.EndpointRegistry; +import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory; +import org.apache.tuscany.sca.runtime.RuntimeComponent; +import org.apache.tuscany.sca.runtime.RuntimeComponentReference; +import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; +import org.apache.tuscany.sca.runtime.RuntimeProperties; +import org.apache.tuscany.sca.work.WorkScheduler; +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.ServiceRuntimeException; + +public class Handler2 { + + private Properties properties; + private ExtensionPointRegistry extensionPointRegistry; + private EndpointRegistry endpointRegistry; + private boolean localRuntime; + private boolean closableClient; + private String domainURI; + + + public Handler2(ExtensionPointRegistry extensionPointRegistry, EndpointRegistry endpointRegistry, Properties properties) { + this.extensionPointRegistry = extensionPointRegistry; + this.endpointRegistry = endpointRegistry; + this.localRuntime = true; + this.properties = properties; + initCloseable(properties); + } + + public Handler2(String domainURI, Properties properties) throws NoSuchDomainException { + this.domainURI = domainURI; + this.properties = properties; + initCloseable(properties); + initExtensionPointRegistry(); + } + + + private void initExtensionPointRegistry() throws NoSuchDomainException { + this.extensionPointRegistry = new DefaultExtensionPointRegistry(); + extensionPointRegistry.start(); + + FactoryExtensionPoint modelFactories = extensionPointRegistry.getExtensionPoint(FactoryExtensionPoint.class); + RuntimeAssemblyFactory assemblyFactory = new RuntimeAssemblyFactory(extensionPointRegistry); + modelFactories.addFactory(assemblyFactory); + + UtilityExtensionPoint utilities = extensionPointRegistry.getExtensionPoint(UtilityExtensionPoint.class); + + properties.setProperty("client", "true"); + + utilities.getUtility(RuntimeProperties.class).setProperties(properties); + utilities.getUtility(WorkScheduler.class); + + // Initialize the Tuscany module activators + // The module activators will be started + extensionPointRegistry.getExtensionPoint(ModuleActivatorExtensionPoint.class); + + getEndpointRegistry(); + } + + private EndpointRegistry getEndpointRegistry() throws NoSuchDomainException { + DomainRegistryFactory domainRegistryFactory = ExtensibleDomainRegistryFactory.getInstance(extensionPointRegistry); + + 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); + } + } + + + private void initCloseable(Properties properties) { + String s = properties.getProperty("org.apache.tuscany.sca.client.closeable"); + closableClient = (s != null) && Boolean.parseBoolean(s); + } + + public T getService(Class interfaze, 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); + } + } + + if (localRuntime) { + return localRuntimeService(interfaze, serviceURI, serviceName); + } else { + return remoteService(interfaze, serviceURI, serviceName); + } + } + + private T remoteService(Class interfaze, String serviceURI, String serviceName) throws NoSuchDomainException { + InvocationHandler handler = new SCAClientHandler(domainURI, serviceURI, interfaze, properties); + return (T)Proxy.newProxyInstance(interfaze.getClassLoader(), new Class[]{interfaze}, handler); + } + + private void initRegistries() { + // TODO Auto-generated method stub + } + + private T localRuntimeService(Class interfaze, String serviceURI, String serviceName) + throws NoSuchServiceException { + List endpoints = endpointRegistry.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(interfaze, serviceName).getService(); + } else { + return getRemoteProxy(interfaze, ep); + } + } + + private T getRemoteProxy(Class serviceInterface, Endpoint endpoint) throws NoSuchServiceException { + FactoryExtensionPoint factories = extensionPointRegistry.getExtensionPoint(FactoryExtensionPoint.class); + AssemblyFactory assemblyFactory = factories.getFactory(AssemblyFactory.class); + JavaInterfaceFactory javaInterfaceFactory = factories.getFactory(JavaInterfaceFactory.class); + ProxyFactory proxyFactory = + new ExtensibleProxyFactory(extensionPointRegistry.getExtensionPoint(ProxyFactoryExtensionPoint.class)); + + CompositeContext compositeContext = + new CompositeContext(extensionPointRegistry, endpointRegistry, null, null, null, null); + + RuntimeEndpointReference epr; + try { + epr = + createEndpointReference(javaInterfaceFactory, + compositeContext, + assemblyFactory, + endpoint, + serviceInterface); + } catch (Exception e) { + throw new ServiceRuntimeException(e); + } + + return proxyFactory.createProxy(serviceInterface, epr); + } + + 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; + } + + 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/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java index b8830d4d60..8e3a512bc6 100644 --- a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java +++ b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java @@ -43,7 +43,7 @@ public class SCAClientFactoryFinderImpl implements SCAClientFactoryFinder { public SCAClientFactory find(Properties properties, ClassLoader classLoader, URI domainURI ) throws NoSuchDomainException, ServiceRuntimeException { - return new SCAClientFactoryImpl2(domainURI); + return new SCAClientFactoryImpl3(properties, domainURI); } } diff --git a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java index 3734fcfde2..79ae43e45e 100644 --- a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java +++ b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java @@ -56,8 +56,8 @@ public class SCAClientFactoryImpl2 extends SCAClientFactory { } // Check for remote node - SCAClientHandler handler = new SCAClientHandler(domainName, null, null); - handler.checkDomain(); + SCAClientHandler handler = new SCAClientHandler(domainName, null, null, null); +// handler.checkDomain(); } @SuppressWarnings("unchecked") @@ -82,7 +82,7 @@ public class SCAClientFactoryImpl2 extends SCAClientFactory { throw new NoSuchServiceException(serviceName); } - InvocationHandler handler = new SCAClientHandler(getDomainURI().toString(), serviceName, serviceInterface); + InvocationHandler handler = new SCAClientHandler(getDomainURI().toString(), serviceName, serviceInterface, null); return (T)Proxy.newProxyInstance(serviceInterface.getClassLoader(), 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/SCAClientFactoryImpl3.java b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java new file mode 100644 index 0000000000..77b5f7bb1b --- /dev/null +++ b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java @@ -0,0 +1,74 @@ +/* + * 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.net.URI; +import java.util.Properties; + +import org.apache.tuscany.sca.core.ExtensionPointRegistry; +import org.apache.tuscany.sca.core.ExtensionPointRegistryLocator; +import org.apache.tuscany.sca.runtime.EndpointRegistry; +import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory; +import org.oasisopen.sca.NoSuchDomainException; +import org.oasisopen.sca.NoSuchServiceException; +import org.oasisopen.sca.client.SCAClientFactory; +import org.oasisopen.sca.client.SCAClientFactoryFinder; + +public class SCAClientFactoryImpl3 extends SCAClientFactory { + + private Handler2 handler2; + + public static void setSCAClientFactoryFinder(SCAClientFactoryFinder factoryFinder) { + SCAClientFactory.factoryFinder = factoryFinder; + } + + public SCAClientFactoryImpl3(URI domainURI) throws NoSuchDomainException { + this(null, domainURI); + } + + public SCAClientFactoryImpl3(Properties properties, URI domainURI) throws NoSuchDomainException { + super(domainURI); + if (properties == null) { + properties = new Properties(); + } + initRegistries(properties); + } + + private void initRegistries(Properties properties) throws NoSuchDomainException { + String domainURI = getDomainURI().toString(); + for (ExtensionPointRegistry xpr : ExtensionPointRegistryLocator.getExtensionPointRegistries()) { + ExtensibleDomainRegistryFactory drf = ExtensibleDomainRegistryFactory.getInstance(xpr); + for (EndpointRegistry epr : drf.getEndpointRegistries()) { + if (domainURI.equals(epr.getDomainURI())) { + this.handler2 = new Handler2(xpr, epr, properties); + break; + } + } + } + if (handler2 == null) { + handler2 = new Handler2(domainURI, properties); + } + } + + @Override + public T getService(Class serviceInterface, String serviceName) throws NoSuchServiceException, NoSuchDomainException { + return handler2.getService(serviceInterface, serviceName); + } +} diff --git a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java index 59d90bb3cd..d86fc97f14 100644 --- a/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java +++ b/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java @@ -24,7 +24,6 @@ import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.List; import java.util.Properties; -import java.util.UUID; import org.apache.tuscany.sca.assembly.AssemblyFactory; import org.apache.tuscany.sca.assembly.Component; @@ -35,9 +34,12 @@ 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.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.core.invocation.ExtensibleProxyFactory; import org.apache.tuscany.sca.core.invocation.ProxyFactory; import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint; @@ -46,8 +48,6 @@ 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.node.NodeFactory; -import org.apache.tuscany.sca.node.impl.NodeFactoryImpl; import org.apache.tuscany.sca.runtime.DomainRegistryFactory; import org.apache.tuscany.sca.runtime.EndpointRegistry; import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory; @@ -55,6 +55,7 @@ import org.apache.tuscany.sca.runtime.RuntimeComponent; import org.apache.tuscany.sca.runtime.RuntimeComponentReference; import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; import org.apache.tuscany.sca.runtime.RuntimeProperties; +import org.apache.tuscany.sca.work.WorkScheduler; import org.oasisopen.sca.NoSuchDomainException; import org.oasisopen.sca.NoSuchServiceException; import org.oasisopen.sca.ServiceRuntimeException; @@ -64,87 +65,79 @@ public class SCAClientHandler implements InvocationHandler { private String domainURI; private String serviceName; private Class serviceInterface; + private Properties config; + private ExtensionPointRegistry extensionsRegistry; - public SCAClientHandler(String domainURI, String serviceName, Class serviceInterface) { + public SCAClientHandler(String domainURI, String serviceName, Class serviceInterface, Properties properties) throws NoSuchDomainException { this.domainURI = domainURI; this.serviceName = serviceName; this.serviceInterface = serviceInterface; + this.config = properties; + initExtensionPointRegistry(); + extensionsRegistry.stop(); } - public void checkDomain() throws NoSuchDomainException { - NodeFactoryImpl nodeFactory = (NodeFactoryImpl)NodeFactory.newInstance(domainURI); - try { - nodeFactory.init(); - - ExtensionPointRegistry extensionsRegistry = nodeFactory.getExtensionPointRegistry(); - Properties props = extensionsRegistry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(RuntimeProperties.class).getProperties(); - props.setProperty("client", "true"); - DomainRegistryFactory domainRegistryFactory = ExtensibleDomainRegistryFactory.getInstance(extensionsRegistry); - - String registryURI = domainURI; + private void initExtensionPointRegistry() throws NoSuchDomainException { + this.extensionsRegistry = new DefaultExtensionPointRegistry(); + extensionsRegistry.start(); - // 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 { - domainRegistryFactory.getEndpointRegistry(registryURI, domainURI); - } catch (Exception e) { - throw new NoSuchDomainException(domainURI, e); - } - } finally { - nodeFactory.destroy(); + FactoryExtensionPoint modelFactories = extensionsRegistry.getExtensionPoint(FactoryExtensionPoint.class); + RuntimeAssemblyFactory assemblyFactory = new RuntimeAssemblyFactory(extensionsRegistry); + modelFactories.addFactory(assemblyFactory); + + UtilityExtensionPoint utilities = extensionsRegistry.getExtensionPoint(UtilityExtensionPoint.class); + + config.setProperty("client", "true"); + + utilities.getUtility(RuntimeProperties.class).setProperties(config); + utilities.getUtility(WorkScheduler.class); + + // Initialize the Tuscany module activators + // The module activators will be started + extensionsRegistry.getExtensionPoint(ModuleActivatorExtensionPoint.class); + + getEndpointRegistry(); + } + + private EndpointRegistry getEndpointRegistry() 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 Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - NodeFactoryImpl nodeFactory = (NodeFactoryImpl)NodeFactory.newInstance(domainURI); + if (extensionsRegistry == null) { + initExtensionPointRegistry(); + } try { - nodeFactory.init(); - - ExtensionPointRegistry extensionsRegistry = nodeFactory.getExtensionPointRegistry(); - Properties props = extensionsRegistry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(RuntimeProperties.class).getProperties(); - props.setProperty("client", "true"); - 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); - } - - EndpointRegistry endpointRegistry; - try { - endpointRegistry = domainRegistryFactory.getEndpointRegistry(registryURI, domainURI); - } catch (Exception e) { - throw new NoSuchDomainException(domainURI, e); - } + EndpointRegistry endpointRegistry = getEndpointRegistry(); 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)); - String client = "sca.client." + UUID.randomUUID(); - CompositeContext compositeContext = - new CompositeContext(extensionsRegistry, endpointRegistry, null, domainURI.toString(), client, nodeFactory.getDeployer().getSystemDefinitions()); + CompositeContext compositeContext = new CompositeContext(extensionsRegistry, endpointRegistry, null, domainURI.toString(), null, null); List eps = endpointRegistry.findEndpoint(serviceName); if (eps == null || eps.size() < 1) { @@ -163,7 +156,8 @@ public class SCAClientHandler implements InvocationHandler { return handler.invoke(proxy, method, args); } finally { - nodeFactory.destroy(); + extensionsRegistry.stop(); + extensionsRegistry = null; } } -- cgit v1.2.3