Author: antelder
Date: Mon Mar 21 15:15:35 2011
New Revision: 1083823

URL: http://svn.apache.org/viewvc?rev=1083823&view=rev
Log:
Start of getting the remote sca client working again. This works now but theres 
a lot of clean up needed

Added:
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java
   (with props)
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
   (with props)
Modified:
    tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java
    
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory

Modified: tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml?rev=1083823&r1=1083822&r2=1083823&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/modules/sca-client-impl/pom.xml Mon Mar 21 
15:15:35 2011
@@ -38,6 +38,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-core</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-node-impl</artifactId>
             <version>2.0-SNAPSHOT</version>
         </dependency>

Added: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java?rev=1083823&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java
 Mon Mar 21 15:15:35 2011
@@ -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> T getService(Class<T> 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> T remoteService(Class<T> 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> T localRuntimeService(Class<T> interfaze, String serviceURI, 
String serviceName)
+        throws NoSuchServiceException {
+        List<Endpoint> 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> T getRemoteProxy(Class<T> 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;
+    }
+}

Propchange: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/Handler2.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java?rev=1083823&r1=1083822&r2=1083823&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryFinderImpl.java
 Mon Mar 21 15:15:35 2011
@@ -43,7 +43,7 @@ public class SCAClientFactoryFinderImpl 
     public SCAClientFactory find(Properties properties,
                                  ClassLoader classLoader,
                                  URI domainURI ) throws NoSuchDomainException, 
ServiceRuntimeException {
-        return new SCAClientFactoryImpl2(domainURI);
+        return new SCAClientFactoryImpl3(properties, domainURI);
     }
     
 }

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java?rev=1083823&r1=1083822&r2=1083823&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl2.java
 Mon Mar 21 15:15:35 2011
@@ -56,8 +56,8 @@ public class SCAClientFactoryImpl2 exten
         }
     
         // 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 exten
             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);
     }
 

Added: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java?rev=1083823&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
 Mon Mar 21 15:15:35 2011
@@ -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> T getService(Class<T> serviceInterface, String serviceName) 
throws NoSuchServiceException, NoSuchDomainException {
+        return handler2.getService(serviceInterface, serviceName);
+    }
+}

Propchange: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientFactoryImpl3.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java?rev=1083823&r1=1083822&r2=1083823&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/java/org/apache/tuscany/sca/client/impl/SCAClientHandler.java
 Mon Mar 21 15:15:35 2011
@@ -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.E
 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.interfaced
 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.Ru
 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
     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();
+
+        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);
 
-            // 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();
+        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<Endpoint> eps = endpointRegistry.findEndpoint(serviceName);
             if (eps == null || eps.size() < 1) {
@@ -163,7 +156,8 @@ public class SCAClientHandler implements
             return handler.invoke(proxy, method, args);
             
         } finally {
-            nodeFactory.destroy();
+            extensionsRegistry.stop();
+            extensionsRegistry = null;
         }
     }
 

Modified: 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory?rev=1083823&r1=1083822&r2=1083823&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/sca-client-impl/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
 Mon Mar 21 15:15:35 2011
@@ -15,4 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 # Implementation class for the ModuleActivator
-org.apache.tuscany.sca.client.impl.SCAClientFactoryImpl2
+org.apache.tuscany.sca.client.impl.SCAClientFactoryImpl3


Reply via email to