You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sv...@apache.org on 2007/05/04 15:03:44 UTC

svn commit: r535224 - in /incubator/tuscany/java/sca/modules/binding-rmi/src: main/java/org/apache/tuscany/binding/rmi/ main/java/org/apache/tuscany/binding/rmi/impl/ main/java/org/apache/tuscany/binding/rmi/xml/ test/java/helloworld/ test/java/org/apa...

Author: svkrish
Date: Fri May  4 06:03:42 2007
New Revision: 535224

URL: http://svn.apache.org/viewvc?view=rev&rev=535224
Log:
Fixed to work with the new runtime SPIs

Added:
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/DefaultRMIBindingFactory.java
      - copied, changed from r535105, incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/DefaultRMIBindingFactory.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingImpl.java
      - copied, changed from r535105, incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/RMIBindingImpl.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingInterceptor.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingProvider.java
Removed:
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReferenceBinding.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIServiceBinding.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/
Modified:
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingFactory.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIModuleActivator.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/xml/RMIBindingProcessor.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldImpl.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiImpl.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiService.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldService.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/BindingTestCase.java

Copied: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/DefaultRMIBindingFactory.java (from r535105, incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/DefaultRMIBindingFactory.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/DefaultRMIBindingFactory.java?view=diff&rev=535224&p1=incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/DefaultRMIBindingFactory.java&r1=535105&p2=incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/DefaultRMIBindingFactory.java&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/DefaultRMIBindingFactory.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/DefaultRMIBindingFactory.java Fri May  4 06:03:42 2007
@@ -16,10 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.    
  */
-package org.apache.tuscany.binding.rmi.impl;
+package org.apache.tuscany.binding.rmi;
 
-import org.apache.tuscany.binding.rmi.RMIBinding;
-import org.apache.tuscany.binding.rmi.RMIBindingFactory;
+import org.apache.tuscany.rmi.RMIHostExtensionPoint;
 
 /**
  * A factory for the WSDL model.
@@ -27,9 +26,14 @@
  * @version $Rev: 526508 $ $Date: 2007-04-08 07:42:42 +0530 (Sun, 08 Apr 2007) $
  */
 public class DefaultRMIBindingFactory implements RMIBindingFactory {
-
-    public RMIBinding createWebServiceBinding() {
-        return new RMIBindingImpl();
+    private RMIHostExtensionPoint rmiHost = null;
+    
+    public DefaultRMIBindingFactory(RMIHostExtensionPoint rmiHost) {
+        this.rmiHost = rmiHost;
+    }
+    
+    public RMIBinding createRMIBinding() {
+        return new RMIBindingProvider(rmiHost);
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingFactory.java?view=diff&rev=535224&r1=535223&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingFactory.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingFactory.java Fri May  4 06:03:42 2007
@@ -28,6 +28,6 @@
      * 
      * @return a new RMI binding
      */
-    RMIBinding createWebServiceBinding();
+    RMIBinding createRMIBinding();
 
 }

Copied: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingImpl.java (from r535105, incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/RMIBindingImpl.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingImpl.java?view=diff&rev=535224&p1=incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/RMIBindingImpl.java&r1=535105&p2=incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingImpl.java&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/RMIBindingImpl.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingImpl.java Fri May  4 06:03:42 2007
@@ -14,11 +14,9 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.tuscany.binding.rmi.impl;
+package org.apache.tuscany.binding.rmi;
 
 import org.apache.tuscany.assembly.impl.BindingImpl;
-import org.apache.tuscany.binding.rmi.RMIBinding;
-import org.apache.tuscany.binding.rmi.RMIBindingConstants;
 
 /**
  * Represents a binding to an RMI service.

Added: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingInterceptor.java?view=auto&rev=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingInterceptor.java (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingInterceptor.java Fri May  4 06:03:42 2007
@@ -0,0 +1,103 @@
+/**
+ * * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.binding.rmi;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.rmi.Remote;
+
+import org.apache.tuscany.rmi.RMIHostException;
+import org.apache.tuscany.rmi.RMIHostExtensionPoint;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+
+public class RMIBindingInterceptor implements Interceptor {
+    private RMIHostExtensionPoint rmiHost;
+    private String host;
+    private String port;
+    private String svcName;
+    private Method remoteMethod;
+    private Remote proxy;
+    
+    private Interceptor next;
+    
+    public RMIBindingInterceptor(RMIHostExtensionPoint rmiHost, String host, String port, String svcName, Method remoteMethod) {
+        this.rmiHost = rmiHost;
+        this.remoteMethod = remoteMethod;
+        this.host = host;
+        this.port = port;
+        this.svcName = svcName;
+    }
+    
+    public Message invoke(Message msg) throws InvocationRuntimeException {
+        try {
+            Object resp = invokeTarget((Object[])msg.getBody());
+            msg.setBody(resp);
+        } catch (InvocationTargetException e) {
+            msg.setBodyWithFault(e.getCause());
+        } catch (Throwable e) {
+            msg.setBodyWithFault(e);
+        }
+        return msg;
+    }  
+    
+    
+    public Object invokeTarget(final Object payload) throws InvocationTargetException {
+        try {
+            if (proxy == null) {
+                proxy = rmiHost.findService(host, port, svcName);
+                // proxy = Naming.lookup(serviceURI);
+            }
+            remoteMethod = proxy.getClass().getMethod(remoteMethod.getName(), remoteMethod.getParameterTypes());
+            
+            if (payload != null && !payload.getClass().isArray()) {
+                return remoteMethod.invoke(proxy, payload);
+            } else {
+                return remoteMethod.invoke(proxy, (Object[])payload);
+                
+            }
+        } catch (RMIHostException e) {
+            // the method we are passed must be accessible
+            throw new AssertionError(e);
+        } catch (IllegalAccessException e) {
+            // the method we are passed must be accessible
+            throw new AssertionError(e);
+        } catch (NoSuchMethodException e) {
+            throw new AssertionError(e);
+        }
+
+    }
+    
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+
+    public Interceptor getNext() {
+        return next;
+    }
+
+    public void setNext(Interceptor next) {
+        this.next = next;
+    }
+
+    public boolean isOptimizable() {
+        return false;
+    }
+
+}

Added: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingProvider.java?view=auto&rev=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingProvider.java (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingProvider.java Fri May  4 06:03:42 2007
@@ -0,0 +1,277 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.binding.rmi;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.rmi.Remote;
+import java.rmi.server.UnicastRemoteObject;
+
+import net.sf.cglib.asm.ClassWriter;
+import net.sf.cglib.asm.Constants;
+import net.sf.cglib.asm.Type;
+import net.sf.cglib.proxy.Enhancer;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+
+import org.apache.tuscany.assembly.Component;
+import org.apache.tuscany.assembly.ComponentReference;
+import org.apache.tuscany.assembly.ComponentService;
+import org.apache.tuscany.core.ReferenceBindingActivator;
+import org.apache.tuscany.core.ReferenceBindingProvider;
+import org.apache.tuscany.core.RuntimeComponentService;
+import org.apache.tuscany.core.RuntimeWire;
+import org.apache.tuscany.core.ServiceBindingActivator;
+import org.apache.tuscany.core.ServiceBindingProvider;
+import org.apache.tuscany.core.component.SimpleWorkContext;
+import org.apache.tuscany.interfacedef.Interface;
+import org.apache.tuscany.interfacedef.InterfaceContract;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.interfacedef.java.JavaInterface;
+import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceUtil;
+import org.apache.tuscany.rmi.RMIHostException;
+import org.apache.tuscany.rmi.RMIHostExtensionPoint;
+import org.apache.tuscany.spi.Scope;
+import org.apache.tuscany.spi.bootstrap.ComponentNames;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.component.WorkContextTunnel;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.InvocationChain;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+/**
+ * @author administrator
+ *
+ */
+public class RMIBindingProvider extends RMIBindingImpl implements ReferenceBindingActivator,
+ReferenceBindingProvider, ServiceBindingActivator, ServiceBindingProvider, MethodInterceptor {
+
+    private RMIHostExtensionPoint rmiHost;
+    private RuntimeWire wire;
+    
+    //need this member to morph the service interface to extend from Remote if it does not
+    // the base class's member variable interfaze is to be maintained to enable the connection
+    // of the service outbound to the component's inbound wire which requires that the service
+    // and the component match in their service contracts.
+    private Interface serviceInterface;
+    
+    public RMIBindingProvider(RMIHostExtensionPoint rmiHost) {
+        this.rmiHost = rmiHost;
+    }
+
+    public InterfaceContract getBindingInterfaceContract(ComponentService service) {
+        return service.getInterfaceContract();
+    }
+
+    public void start(Component component, ComponentReference reference) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void stop(Component component, ComponentReference reference) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void start(Component component, ComponentService service) {
+        URI uri = URI.create(component.getURI() + "/" + getName());
+        setURI(uri.toString());
+        RuntimeComponentService componentService = (RuntimeComponentService) service;
+        
+        //TODO : Need to figure out why we do a get(0)... will this work always...
+        this.wire = componentService.getRuntimeWires().get(0);
+        this.serviceInterface = service.getInterfaceContract().getInterface();
+        
+        Remote rmiProxy = createRmiService();
+        
+        try {
+            rmiHost.registerService(getRmiServiceName(),
+                                    getPort(getRmiPort()),
+                                    rmiProxy);
+        } catch (RMIHostException e) {
+            throw new NoRemoteServiceException(e);
+        }
+    }
+
+    public void stop(Component component, ComponentService service) {
+        try {
+            rmiHost.unregisterService(getRmiServiceName(), 
+                                      getPort(getRmiPort()));
+        } catch (RMIHostException e) {
+            throw new NoRemoteServiceException(e.getMessage());
+        }
+        
+    }
+
+    public Interceptor createInterceptor(Component component, ComponentReference reference, Operation operation, boolean isCallback) {
+       try {
+            Method remoteMethod = 
+                JavaInterfaceUtil.findMethod(((JavaInterface)reference.getInterfaceContract().getInterface()).getJavaClass(),
+                                                operation);
+            return new RMIBindingInterceptor(rmiHost, 
+                                             getRmiHostName(), 
+                                             getRmiPort(), 
+                                             getRmiServiceName(), 
+                                             remoteMethod);
+        } catch (NoSuchMethodException e) {
+            throw new NoRemoteMethodException(operation.toString(), e);
+        }
+    }
+
+    public InterfaceContract getBindingInterfaceContract(ComponentReference reference) {
+        return reference.getInterfaceContract();
+    }
+    
+    protected Remote createRmiService() {
+        Enhancer enhancer = new Enhancer();
+        enhancer.setSuperclass(UnicastRemoteObject.class);
+        enhancer.setCallback(this);
+        Class targetJavaInterface = getTargetJavaClass(serviceInterface);
+        if (!Remote.class.isAssignableFrom(targetJavaInterface)) {
+            RMIServiceClassLoader classloader =
+                new RMIServiceClassLoader(getClass().getClassLoader());
+            final byte[] byteCode = generateRemoteInterface(targetJavaInterface);
+            targetJavaInterface = classloader.defineClass(byteCode);
+            enhancer.setClassLoader(classloader);
+        }
+        enhancer.setInterfaces(new Class[]{targetJavaInterface});
+        return (Remote) enhancer.create();
+    }
+    
+    // if the interface of the component whose serviceBindings must be exposed as RMI Service, does not
+    // implement java.rmi.Remote, then generate such an interface. This method will stop with
+    // just generating the bytecode. Defining the class from the byte code must tbe the responsibility
+    // of the caller of this method, since it requires a classloader to be created to define and load
+    // this interface.
+    protected byte[] generateRemoteInterface(Class serviceInterface) {
+        String interfazeName = serviceInterface.getCanonicalName();
+        ClassWriter cw = new ClassWriter(false);
+
+        String simpleName = serviceInterface.getSimpleName();
+        cw.visit(Constants.V1_5, Constants.ACC_PUBLIC + Constants.ACC_ABSTRACT + Constants.ACC_INTERFACE,
+            interfazeName.replace('.', '/'), "java/lang/Object", new String[]{"java/rmi/Remote"}, simpleName + ".java");
+
+        StringBuffer argsAndReturn = null;
+        Method[] methods = serviceInterface.getMethods();
+        for (Method method : methods) {
+            argsAndReturn = new StringBuffer("(");
+            Class[] paramTypes = method.getParameterTypes();
+            Class returnType = method.getReturnType();
+
+            for (Class paramType : paramTypes) {
+                argsAndReturn.append(Type.getType(paramType));
+            }
+            argsAndReturn.append(")");
+            argsAndReturn.append(Type.getType(returnType));
+
+            cw.visitMethod(Constants.ACC_PUBLIC + Constants.ACC_ABSTRACT, method.getName(), argsAndReturn.toString(),
+                new String[]{"java/rmi/RemoteException"}, null);
+        }
+        cw.visitEnd();
+        return cw.toByteArray();
+    }
+    
+    public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
+        // since incoming method signatures have 'remotemethod invocation' it will not match with the
+        // wired component's method signatures. Hence need to pull in the corresponding method from the
+        // component's service contract interface to make this invocation.
+        
+        
+        return invokeTarget(JavaInterfaceUtil.findOperation(method, serviceInterface.getOperations()), 
+                                                            args);
+    }
+    
+    public Object invokeTarget(Operation op, 
+                               Object[] args) throws InvocationTargetException {
+        InvocationChain chain = null;
+        
+        for (InvocationChain ic : wire.getInvocationChains()) {
+            if (ic.getSourceOperation().equals(op)) {
+                chain = ic;
+            }
+        }
+        if (chain == null) {
+            throw new IllegalStateException("no InvocationChain on wire for operation " + op);
+        }
+        
+        Interceptor headInterceptor = chain.getHeadInterceptor();
+        WorkContext workContext = WorkContextTunnel.getThreadWorkContext();
+        if (workContext == null) {
+            workContext = new SimpleWorkContext();
+            workContext.setIdentifier(Scope.COMPOSITE, ComponentNames.TUSCANY_APPLICATION_ROOT.resolve("default"));
+            WorkContextTunnel.setThreadWorkContext(workContext);
+        }
+        
+        String oldConversationID = (String) workContext.getIdentifier(Scope.CONVERSATION);
+        
+        try {
+            if (headInterceptor == null) {
+                // short-circuit the dispatch and invoke the target directly
+                TargetInvoker targetInvoker = chain.getTargetInvoker();
+                if (targetInvoker == null) {
+                    throw new AssertionError("No target invoker [" + chain.getTargetOperation().getName() + "]");
+                }
+                return targetInvoker.invokeTarget(args, TargetInvoker.NONE, null);
+            } else {
+                Message msg = new MessageImpl();
+                msg.setTargetInvoker(chain.getTargetInvoker());
+                msg.setBody(args);
+                msg.setWorkContext(workContext);
+
+                Message resp;
+                // dispatch the wire down the chain and get the response
+                resp = headInterceptor.invoke(msg);
+                Object body = resp.getBody();
+                if (resp.isFault()) {
+                    throw new InvocationTargetException((Throwable) body);
+                }
+                return body;
+            }
+        } finally {
+        }
+    }
+    
+    protected int getPort(String port) {
+        int portNumber = RMIHostExtensionPoint.RMI_DEFAULT_PORT;
+        if (port != null && port.length() > 0) {
+            portNumber = Integer.decode(port);
+        }
+
+        return portNumber;
+    }
+    
+    private Class<?> getTargetJavaClass(Interface targetInterface) {
+        //TODO: right now assume that the target is always a Java Implementation.  Need to figure out
+        // how to generate Java Interface in cases where the target is not a Java Implementation
+        return ((JavaInterface)targetInterface).getJavaClass();
+    }
+    
+    private class RMIServiceClassLoader extends ClassLoader {
+        public RMIServiceClassLoader(ClassLoader parent) {
+            super(parent);
+        }
+
+        public Class defineClass(byte[] byteArray) {
+            return defineClass(null, byteArray, 0, byteArray.length);
+        }
+    }
+
+}

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIModuleActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIModuleActivator.java?view=diff&rev=535224&r1=535223&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIModuleActivator.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIModuleActivator.java Fri May  4 06:03:42 2007
@@ -23,7 +23,6 @@
 
 import org.apache.tuscany.assembly.AssemblyFactory;
 import org.apache.tuscany.assembly.impl.DefaultAssemblyFactory;
-import org.apache.tuscany.binding.rmi.impl.DefaultRMIBindingFactory;
 import org.apache.tuscany.binding.rmi.xml.RMIBindingProcessor;
 import org.apache.tuscany.contribution.processor.StAXArtifactProcessorExtensionPoint;
 import org.apache.tuscany.core.ExtensionPointRegistry;
@@ -31,36 +30,22 @@
 import org.apache.tuscany.policy.PolicyFactory;
 import org.apache.tuscany.policy.impl.DefaultPolicyFactory;
 import org.apache.tuscany.rmi.RMIHostExtensionPoint;
-import org.apache.tuscany.spi.builder.BuilderRegistry;
 
 public class RMIModuleActivator implements ModuleActivator {
 
-    private RMIBindingBuilder builder;
-
     public void start(ExtensionPointRegistry registry) {
 
         StAXArtifactProcessorExtensionPoint processors = 
             registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
-        RMIBindingFactory rmiFactory = new DefaultRMIBindingFactory();
         AssemblyFactory assemblyFactory = new DefaultAssemblyFactory();
         PolicyFactory policyFactory = new DefaultPolicyFactory();
-        processors.addArtifactProcessor(new RMIBindingProcessor(assemblyFactory, policyFactory, rmiFactory));
-
-        RMIHostExtensionPoint rmiHost = registry.getExtensionPoint(RMIHostExtensionPoint.class);
         
-        BuilderRegistry builderRegistry = registry.getExtensionPoint(BuilderRegistry.class);
-        builder = new RMIBindingBuilder();
-        builder.setBuilderRegistry(builderRegistry);
-        builder.setRmiHost(rmiHost);
-        builder.init();
+        RMIHostExtensionPoint rmiHost = registry.getExtensionPoint(RMIHostExtensionPoint.class);
+        RMIBindingFactory rmiFactory = new DefaultRMIBindingFactory(rmiHost);
+        processors.addArtifactProcessor(new RMIBindingProcessor(assemblyFactory, policyFactory, rmiFactory));
     }
 
     public void stop(ExtensionPointRegistry registry) {
-        //FIXME
-        // release resources held by bindings
-        // needed because the stop methods in ReferenceImpl and ServiceImpl aren't being called
-        // TODO: revisit this as part of the lifecycle work
-        builder.destroy(); // release connections
     }
 
     public Map<Class, Object> getExtensionPoints() {

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/xml/RMIBindingProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/xml/RMIBindingProcessor.java?view=diff&rev=535224&r1=535223&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/xml/RMIBindingProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/xml/RMIBindingProcessor.java Fri May  4 06:03:42 2007
@@ -53,7 +53,7 @@
 
     public RMIBinding read(XMLStreamReader reader) throws ContributionReadException {
         try {
-            RMIBinding rmiBinding = rmiBindingFactory.createWebServiceBinding();
+            RMIBinding rmiBinding = rmiBindingFactory.createRMIBinding();
             rmiBinding.setUnresolved(true);
             
             //Read policies

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldImpl.java?view=diff&rev=535224&r1=535223&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldImpl.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldImpl.java Fri May  4 06:03:42 2007
@@ -30,4 +30,8 @@
     public String sayHello(String name) {
         return "Hello from the RMI Service to - " + name;
     }
+    
+    public String sayHi(String name, String greeter) {
+        return "Hi from " + greeter + " in RMI Service to - " + name;
+    }
 }

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiImpl.java?view=diff&rev=535224&r1=535223&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiImpl.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiImpl.java Fri May  4 06:03:42 2007
@@ -40,5 +40,9 @@
     public String sayRmiHello(String name) {
         return extService.sayHello(name) + " thro the RMI Reference";
     }
+    
+    public String sayRmiHi(String name, String greeter) {
+        return extService.sayHi(name, greeter) + " thro the RMI Reference";
+    }
 
 }

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiService.java?view=diff&rev=535224&r1=535223&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiService.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldRmiService.java Fri May  4 06:03:42 2007
@@ -24,5 +24,6 @@
 public interface HelloWorldRmiService {
 
     String sayRmiHello(String name);
+    String sayRmiHi(String name, String greeter);
 
 }

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldService.java?view=diff&rev=535224&r1=535223&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldService.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/helloworld/HelloWorldService.java Fri May  4 06:03:42 2007
@@ -24,5 +24,6 @@
 public interface HelloWorldService {
 
     String sayHello(String name);
+    String sayHi(String name, String greeter);
 
 }

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/BindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/BindingTestCase.java?view=diff&rev=535224&r1=535223&r2=535224
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/BindingTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/BindingTestCase.java Fri May  4 06:03:42 2007
@@ -21,11 +21,12 @@
 import helloworld.HelloWorldRmiService;
 import junit.framework.Assert;
 
-import org.apache.tuscany.host.embedded.SCARuntime;
+import org.apache.tuscany.host.embedded.SCARuntimeActivator;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.osoa.sca.CurrentCompositeContext;
+import org.osoa.sca.ComponentContext;
+import org.osoa.sca.ServiceReference;
 
 public class BindingTestCase {
     private static HelloWorldRmiService helloWorldRmiService;
@@ -35,22 +36,26 @@
         System.out.println(helloWorldRmiService.sayRmiHello("Tuscany World!"));
         Assert.assertEquals("Hello from the RMI Service to - Tuscany World! thro the RMI Reference",
                 helloWorldRmiService.sayRmiHello("Tuscany World!"));
+        
+        System.out.println(helloWorldRmiService.sayRmiHi("Tuscany World!", "Apache World"));
+        
+        Assert.assertEquals("Hi from Apache World in RMI Service to - Tuscany World! thro the RMI Reference",
+                            helloWorldRmiService.sayRmiHi("Tuscany World!", "Apache World"));
     }
 
 
     
     @BeforeClass
     public static void init() throws Exception {
-        SCARuntime.start("META-INF/sca/RMIBindingTest.composite");
-        helloWorldRmiService = 
-            CurrentCompositeContext.getContext().locateService(HelloWorldRmiService.class,
-                                                                "HelloWorldRmiServiceComponent");
-       
-    }
+        SCARuntimeActivator.start("META-INF/sca/RMIBindingTest.composite");
+        ComponentContext context = SCARuntimeActivator.getComponentContext("HelloWorldRmiServiceComponent");
+        ServiceReference<HelloWorldRmiService> serviceReference = context.createSelfReference(HelloWorldRmiService.class);
+        helloWorldRmiService = serviceReference.getService();
+  }
     
     @AfterClass
     public static void destroy() throws Exception {
-        SCARuntime.stop();
+        SCARuntimeActivator.stop();
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org