You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/08/10 20:46:40 UTC

svn commit: r430475 - in /incubator/tuscany/java/sca: bindings/binding.rmi/ bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/ containers/container.javascript/src/main/resources/META-INF/sca/

Author: antelder
Date: Thu Aug 10 11:46:39 2006
New Revision: 430475

URL: http://svn.apache.org/viewvc?rev=430475&view=rev
Log:
TUSCANY-611
Commit patch from Venkat to get the RMI binding working and updated to work with the latest extension SPIs

 

Added:
    incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java
    incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl
Modified:
    incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml
    incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java
    incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java
    incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java
    incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java
    incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java
    incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl

Modified: incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/pom.xml Thu Aug 10 11:46:39 2006
@@ -31,6 +31,12 @@
 
     <dependencies>
         <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib-nodep</artifactId>
+            <version>2.1_3</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.tuscany</groupId>
             <artifactId>spi</artifactId>
             <version>${sca.version}</version>

Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java Thu Aug 10 11:46:39 2006
@@ -15,9 +15,9 @@
  *  limitations under the License.
  */
 package org.apache.tuscany.binding.rmi;
-
+ 
 import java.rmi.Remote;
-
+ 
 import org.apache.tuscany.spi.builder.InvalidServiceInterfaceException;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.SCAObject;
@@ -42,7 +42,9 @@
         String name = boundServiceDefinition.getName();
         Class<Remote> service = getServiceInterface(boundServiceDefinition);
         String uri = boundServiceDefinition.getBinding().getURI();
-        return new RMIService<Remote>(name, parent, wireService, uri, service);
+        
+        RMIService rmiService = new RMIService<Remote>(name, parent, wireService, uri, service);
+        return rmiService;
     }
 
     @SuppressWarnings({"unchecked"})
@@ -61,6 +63,14 @@
         String name = boundReferenceDefinition.getName();
         String uri = boundReferenceDefinition.getBinding().getURI();
         Class<?> interfaze = boundReferenceDefinition.getServiceContract().getInterfaceClass();
-        return new RMIReference(name, interfaze, parent, wireService, uri);
+        RMIReference rmiReference =  new RMIReference(name, 
+                parent, 
+                wireService, 
+                uri, 
+                boundReferenceDefinition.getServiceContract().getInterfaceClass());
+
+
+return rmiReference;
+
     }
 }

Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java Thu Aug 10 11:46:39 2006
@@ -20,8 +20,6 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import org.osoa.sca.annotations.Scope;
-
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
@@ -29,6 +27,7 @@
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.LoaderUtil;
+import org.osoa.sca.annotations.Scope;
 
 /**
  * Loader for handling <binding.rmi> elements.

Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java Thu Aug 10 11:46:39 2006
@@ -33,12 +33,12 @@
     private final Method remoteMethod;
     private final Remote proxy;
 
-    RMIInvoker(Remote proxy, Method remoteMethod) {
+    public RMIInvoker(Remote proxy, Method remoteMethod) {
         assert remoteMethod.isAccessible();
         this.remoteMethod = remoteMethod;
         this.proxy = proxy;
     }
-
+ 
     public Message invoke(Message msg) throws InvocationRuntimeException {
         try {
             Object resp = invokeTarget(msg.getBody());

Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReference.java Thu Aug 10 11:46:39 2006
@@ -32,14 +32,16 @@
  * @version $Rev$ $Date$
  */
 public class RMIReference<T> extends ReferenceExtension<T> {
-    private final String uri;
+    private final String uri; 
 
-    public RMIReference(String name,
-                        Class<T> interfaze,
-                        CompositeComponent<?> parent,
-                        WireService wireService,
-                        String uri) {
-        super(name, interfaze, parent, wireService);
+    public RMIReference(String name, 
+                        CompositeComponent<?> parent, 
+                        WireService wireService, 
+                        String uri,
+                        Class<T> service) 
+    {
+        super(name, service, parent, wireService);
+        setInterface(service);
         this.uri = uri;
     }
 

Modified: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIService.java Thu Aug 10 11:46:39 2006
@@ -14,28 +14,35 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.tuscany.binding.rmi;
+package org.apache.tuscany.binding.rmi; 
 
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.net.MalformedURLException;
+import java.net.MalformedURLException; 
 import java.rmi.AlreadyBoundException;
 import java.rmi.Naming;
 import java.rmi.NotBoundException;
 import java.rmi.Remote;
 import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.UnicastRemoteObject;
+
+import net.sf.cglib.proxy.Enhancer;
 
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.extension.ServiceExtension;
-import org.apache.tuscany.spi.wire.WireInvocationHandler;
 import org.apache.tuscany.spi.wire.WireService;
-
+ 
 /**
  * @version $Rev$ $Date$
  */
-public class RMIService<T extends Remote> extends ServiceExtension<T> {
+public class RMIService<T extends Remote> extends ServiceExtension<T> 
+{
+    public static final String URI_PREFIX = "//localhost";
+    public static final String SLASH = "/";
+    public static final String COLON = ":"; 
     private final String uri;
+    private Class service = null;
+    int rmiPort = 1099;
 
     public RMIService(String name,
                       CompositeComponent parent,
@@ -44,14 +51,18 @@
                       Class<T> service) {
         super(name, service, parent, wireService);
         this.uri = uri;
+        this.service = service;
     }
 
     public void start() {
         super.start();
-        Remote rmiProxy = createProxy();
+        Remote rmiProxy = createProxy();//createRmiService();
 
-        try {
-            Naming.bind(uri, rmiProxy);
+        try 
+        {
+            startRMIRegistry();
+            bindRmiService(uri, rmiProxy);
+            
         } catch (AlreadyBoundException e) {
             throw new NoRemoteServiceException(e);
         } catch (RemoteException e) {
@@ -67,14 +78,67 @@
         } catch (NotBoundException e) {
             // ignore
         } catch (RemoteException e) {
-            throw new NoRemoteServiceException(e);
+            throw new NoRemoteServiceException(e.getMessage());
         } catch (MalformedURLException e) {
             throw new AssertionError(e);
         }
         super.stop();
     }
+    
+    private Remote createRmiService() 
+    {
+        Enhancer enhancer = new Enhancer();
+        enhancer.setSuperclass(UnicastRemoteObject.class);
+        //Class remoteIfc = RemoteInterfaceGenerator.generateRemoteInterface(serviceInterface, cl);
+        enhancer.setInterfaces(new Class[]{service});
+        enhancer.setCallback(new RemoteMethodHandler(getHandler()));
+        
+        return (Remote)enhancer.create();
+    }
+    
+    private void bindRmiService(String uri, Remote rmiService) throws MalformedURLException, 
+                                                                        RemoteException,
+                                                                        AlreadyBoundException
+    {
+        StringBuffer serverUri = new StringBuffer(URI_PREFIX);
+        
+        serverUri.append(COLON);
+        serverUri.append(rmiPort);
+        serverUri.append(SLASH);
+        serverUri.append(uri);
+        
+        Naming.bind(uri.toString(), rmiService);
+        System.out.println("RMI srevice started - " + uri.toString());
+        
+    }
+
+
+    //how will you stop the registry... no APIs for that... 
+    private void startRMIRegistry() throws RemoteException
+    {
+        try
+        {
+            Registry registry = LocateRegistry.createRegistry(rmiPort);
+        }
+        catch ( Exception e )
+        {
+            LocateRegistry.getRegistry(rmiPort);
+        }
+    }
+    
+    protected T createProxy() 
+    {
+        //InvocationHandler handler = new RMIInvocationHandler(getHandler());
+        return interfaze.cast(createRmiService());
+    }
+    
+    
 
+    /*protected Remote createProxy() 
+    {
+=======
     protected T createProxy() {
+>>>>>>> .r429120
         InvocationHandler handler = new RMIInvocationHandler(getHandler());
         return interfaze.cast(Proxy.newProxyInstance(interfaze.getClassLoader(), new Class[]{interfaze}, handler));
     }
@@ -89,5 +153,6 @@
         public Object invoke(Object object, Method method, Object[] objects) throws Throwable {
             return wireHandler.invoke(method, objects);
         }
-    }
+    }*/
+
 }

Added: incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java?rev=430475&view=auto
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java (added)
+++ incubator/tuscany/java/sca/bindings/binding.rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java Thu Aug 10 11:46:39 2006
@@ -0,0 +1,50 @@
+/**
+ *
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  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.Method;
+
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+
+import org.apache.tuscany.spi.wire.WireInvocationHandler;
+
+public class RemoteMethodHandler implements MethodInterceptor  
+{
+    public static final String FINALIZE_METHOD = "finalize";
+    private WireInvocationHandler wireHandler = null;
+ 
+
+    public RemoteMethodHandler(WireInvocationHandler handler ) 
+    {
+        this.wireHandler = handler;
+    }
+
+    
+    public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable 
+    {
+        //TO BE FIXED: don't know why it hangs for the finalize method... so blocking it for now
+        if ( !method.getName().equals(FINALIZE_METHOD) )
+        {
+            return wireHandler.invoke(method, args);
+        }
+        return methodProxy.invoke(object, args);
+        //return null;
+    }
+
+}
+

Modified: incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl?rev=430475&r1=430474&r2=430475&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl (original)
+++ incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/default.scdl Thu Aug 10 11:46:39 2006
@@ -15,23 +15,23 @@
  *  limitations under the License.
  -->
 <!--
-    JavaScript configuration for the launcher environment.
+    Default system configuration for the launcher environment.
+    
+    $Rev: 423526 $ $Date: 2006-07-19 22:31:58 +0530 (Wed, 19 Jul 2006) $
 -->
 <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
            xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
+           name="org.apache.tuscany.binding.rmi">
 
-           name="org.apache.tuscany.launcher.JavaScriptImplementation">
-
-    <component name="javascript.implementationLoader">
-        <system:implementation.system class="org.apache.tuscany.container.javascript.JavaScriptImplementationLoader"/>
+    <component name="binding.rmi.bindingLoader">
+        <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIBindingLoader"/>
     </component>
-
-    <component name="javascript.componentTypeLoader">
-        <system:implementation.system class="org.apache.tuscany.container.javascript.JavaScriptComponentTypeLoader"/>
+    
+    <component name="binding.rmi.bindingBuilder">
+        <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIBindingBuilder"/>
     </component>
-
-    <component name="javascript.componentBuilder">
-        <system:implementation.system class="org.apache.tuscany.container.javascript.JavaScriptComponentBuilder"/>
+    
+    <component name="binding.rmi.bindingInvoker">
+        <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIInvoker"/>
     </component>
-
-</composite>
\ No newline at end of file
+</composite>

Added: incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl?rev=430475&view=auto
==============================================================================
--- incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl (added)
+++ incubator/tuscany/java/sca/containers/container.javascript/src/main/resources/META-INF/sca/rmi_extension.scdl Thu Aug 10 11:46:39 2006
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *  Copyright (c) 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  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.
+ -->
+<!--
+    Default system configuration for the launcher environment.
+    
+    $Rev: 423526 $ $Date: 2006-07-19 22:31:58 +0530 (Wed, 19 Jul 2006) $
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+           xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
+           name="org.apache.tuscany.binding.rmi">
+
+    <component name="binding.rmi.bindingLoader">
+        <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIBindingLoader"/>
+    </component>
+    
+    <component name="binding.rmi.bindingBuilder">
+        <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIBindingBuilder"/>
+    </component>
+    
+    <component name="binding.rmi.bindingInvoker">
+        <system:implementation.system class="org.apache.tuscany.binding.rmi.RMIInvoker"/>
+    </component>
+</composite>



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