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/04/26 19:36:18 UTC

svn commit: r532812 - in /incubator/tuscany/java/sca/modules/binding-rmi: ./ src/main/java/org/apache/tuscany/binding/rmi/ src/main/java/org/apache/tuscany/binding/rmi/impl/ src/main/resources/META-INF/sca/ src/main/resources/META-INF/services/ src/tes...

Author: svkrish
Date: Thu Apr 26 10:36:16 2007
New Revision: 532812

URL: http://svn.apache.org/viewvc?view=rev&rev=532812
Log:
Reactivated Java RMI Binding

Added:
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBinding.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingConstants.java
    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/impl/
    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/impl/RMIBindingImpl.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/resources/META-INF/services/
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/RMIBindingTest.composite
      - copied, changed from r532247, incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/default.scdl
Removed:
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingDefinition.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingLoader.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RemoteMethodHandler.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/resources/META-INF/sca/
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/RMIBindingBuilderTestCase.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/RMIBindingLoaderTestCase.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/RMIBindingTestCase.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/RMIInvokerTestCase.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/RMIReferenceTestCase.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/RMIServiceTestCase.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/RemoteMethodHandlerTestCase.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/host/
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/default.scdl
Modified:
    incubator/tuscany/java/sca/modules/binding-rmi/pom.xml
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteMethodException.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteServiceException.java
    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/RMIRuntimeException.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/test/java/helloworld/HelloWorldImpl.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/java/org/apache/tuscany/binding/rmi/BindingTestCase.java
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldImpl.componentType
    incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldRmiImpl.componentType

Modified: incubator/tuscany/java/sca/modules/binding-rmi/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/pom.xml?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/pom.xml Thu Apr 26 10:36:16 2007
@@ -22,12 +22,45 @@
     <parent>
         <groupId>org.apache.tuscany.sca</groupId>
         <artifactId>tuscany-modules</artifactId>
-        <version>${version}</version>
+        <version>1.0-incubating-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>tuscany-binding-rmi</artifactId>
     <name>Apache Tuscany Java RMI Binding</name>
 
     <dependencies>
+    	<dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-assembly-xml</artifactId>
+            <version>1.0-incubating-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-core</artifactId>
+            <version>1.0-incubating-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-rmi</artifactId>
+            <version>1.0-incubating-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-implementation-java-runtime</artifactId>
+            <version>1.0-incubating-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+			<groupId>cglib</groupId>
+			<artifactId>cglib-nodep</artifactId>
+			<version>2.1_3</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-host-embedded</artifactId>
+            <version>1.0-incubating-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteMethodException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteMethodException.java?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteMethodException.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteMethodException.java Thu Apr 26 10:36:16 2007
@@ -19,7 +19,10 @@
 /**
  * @version $Rev$ $Date$
  */
-public class NoRemoteMethodException extends RMIRuntimeException {
+public class NoRemoteMethodException extends RuntimeException {
+
+    private static final long serialVersionUID = -4706646034473965972L;
+
     public NoRemoteMethodException() { 
     }
 

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteServiceException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteServiceException.java?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteServiceException.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/NoRemoteServiceException.java Thu Apr 26 10:36:16 2007
@@ -17,9 +17,10 @@
 package org.apache.tuscany.binding.rmi;
 
 /**
- * @version $Rev$ $Date$
  */
 public class NoRemoteServiceException extends RMIRuntimeException {
+   private static final long serialVersionUID = 4940083022809126473L;
+
     public NoRemoteServiceException() { 
     }
 

Added: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBinding.java?view=auto&rev=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBinding.java (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBinding.java Thu Apr 26 10:36:16 2007
@@ -0,0 +1,55 @@
+/**
+ *
+ * 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 org.apache.tuscany.assembly.Binding;
+
+/**
+ * Represents a binding to an RMI service.
+ */
+public interface RMIBinding extends Binding {
+    /**
+     * @return the host name of the RMI Service
+     */
+    String getRmiHostName();
+
+    /**
+     * @param rmiHostName the hostname of the RMI Service
+     */
+    void setRmiHostName(String rmiHostName);
+
+    /**
+     * @return the port number for the RMI Service
+     */
+    String getRmiPort();
+
+    /**
+     * @param rmiPort the port number for the RMI Service
+     */
+    void setRmiPort(String rmiPort);
+
+    /**
+     * @return returns the RMI Service Name
+     */
+    String getRmiServiceName();
+
+    /**
+     * Sets the service name for the RMI Server
+     * @param rmiServiceName the name of the RMI service
+     */
+    void setRmiServiceName(String rmiServiceName);
+}

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingBuilder.java Thu Apr 26 10:36:16 2007
@@ -16,67 +16,103 @@
  */
 package org.apache.tuscany.binding.rmi;
 
+import java.net.URI;
 import java.rmi.Remote;
+import java.util.ArrayList;
+import java.util.List;
 
-import org.osoa.sca.annotations.Constructor;
-
-import org.apache.tuscany.spi.annotation.Autowire;
-import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.assembly.CompositeReference;
+import org.apache.tuscany.assembly.CompositeService;
+import org.apache.tuscany.rmi.RMIHostExtensionPoint;
+import org.apache.tuscany.spi.builder.BuilderException;
 import org.apache.tuscany.spi.component.ReferenceBinding;
 import org.apache.tuscany.spi.component.ServiceBinding;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.BindingBuilderExtension;
-import org.apache.tuscany.spi.model.BoundReferenceDefinition;
-import org.apache.tuscany.spi.model.BoundServiceDefinition;
-
-import org.apache.tuscany.host.rmi.RMIHost;
 
 /**
  * Builds a Service or Reference for an RMI binding.
  *
- * @version $Rev$ $Date$
  */
 
-public class RMIBindingBuilder extends BindingBuilderExtension<RMIBindingDefinition> {
+public class RMIBindingBuilder extends BindingBuilderExtension<RMIBinding> {
+
+    private RMIHostExtensionPoint rmiHost;
+    
+    //track reference bindings and service bindings so that resources can be released
+    // needed because the stop methods in ReferenceImpl and ServiceImpl aren't being called
+    // TODO: revisit this as part of the lifecycle work
+    private List<ReferenceBinding> referenceBindings = new ArrayList<ReferenceBinding>();
+    private List<ServiceBinding> serviceBindings = new ArrayList<ServiceBinding>();
+    
+    
+    protected Class<RMIBinding> getBindingType() {
+        return RMIBinding.class;
+    }
+
+    @Override
+    public ReferenceBinding build(CompositeReference compositeReference, RMIBinding rmiBindingDefn, DeploymentContext context) throws BuilderException {
+
+        URI name = URI.create(context.getComponentId() + "#" + compositeReference.getName());
+        ReferenceBinding referenceBinding = new RMIReferenceBinding(name,
+                                                                    makeTargetURI(rmiBindingDefn),
+                                                                    rmiBindingDefn, 
+                                                                    rmiHost);
+        referenceBindings.add(referenceBinding); // track binding so that its resources can be released
+        return referenceBinding;
+    }
+
+    @Override
+    public ServiceBinding build(CompositeService compositeService, RMIBinding rmiBindingDefn, DeploymentContext context) throws BuilderException {
+        
+        URI name = URI.create(context.getComponentId() + "#" + compositeService.getName());
+        ServiceBinding serviceBinding = new RMIServiceBinding<Remote>(name,
+                                            rmiBindingDefn, 
+                                            rmiHost, 
+                                            compositeService.getInterfaceContract().getInterface());
+        serviceBindings.add(serviceBinding); // track binding so that its resources can be released
+        return serviceBinding;
+    }
 
-    private RMIHost rmiHost;
+    public RMIHostExtensionPoint getRmiHost() {
+        return rmiHost;
+    }
 
-    @Constructor({"rmiHost"})
-    public RMIBindingBuilder(@Autowire RMIHost rHost) {
-        this.rmiHost = rHost;
-    }
-
-    protected Class<RMIBindingDefinition> getBindingType() {
-        return RMIBindingDefinition.class;
-    }
-
-    @SuppressWarnings({"unchecked"})
-    public ServiceBinding build(CompositeComponent parent,
-                                BoundServiceDefinition boundServiceDefinition,
-                                RMIBindingDefinition bindingDefinition,
-                                DeploymentContext deploymentContext) {
-
-        Class intf = boundServiceDefinition.getServiceContract().getInterfaceClass();
-
-        return new RMIServiceBinding<Remote>(boundServiceDefinition.getName(),
-            parent,
-            wireService,
-            rmiHost,
-            bindingDefinition.getHost(),
-            bindingDefinition.getPort(),
-            bindingDefinition.getServiceName(),
-            intf);
-    }
-
-    public ReferenceBinding build(CompositeComponent parent,
-                                  BoundReferenceDefinition boundReferenceDefinition,
-                                  RMIBindingDefinition bindingDefinition,
-                                  DeploymentContext deploymentContext) {
-        String name = boundReferenceDefinition.getName();
-        String host = bindingDefinition.getHost();
-        String port = bindingDefinition.getPort();
-        String svcName = bindingDefinition.getServiceName();
-        return new RMIReferenceBinding(name, parent, rmiHost, host, port, svcName);
+    public void setRmiHost(RMIHostExtensionPoint rmiHost) {
+        this.rmiHost = rmiHost;
+    }
+    
+    private URI makeTargetURI(RMIBinding rmiBinding) {
+        StringBuffer sb = new StringBuffer();
+        sb.append(RMIBindingConstants.FWD_SLASH);
+        sb.append(RMIBindingConstants.FWD_SLASH);
+        if (rmiBinding.getRmiHostName() != null && rmiBinding.getRmiHostName().length() > 0) {
+            sb.append(rmiBinding.getRmiHostName());
+        } else {
+            sb.append(RMIBindingConstants.LOCAL_HOST);
+        }
+        
+        if (rmiBinding.getRmiPort() != null && rmiBinding.getRmiPort().length() > 0) {
+            sb.append(RMIBindingConstants.COLON);
+            sb.append(rmiBinding.getRmiPort());
+        } 
+        sb.append(RMIBindingConstants.FWD_SLASH);
+        sb.append(rmiBinding.getRmiServiceName());
+        
+        return URI.create(sb.toString());
+    }
+    
+    //  release resources held by bindings
+    // called by stop method of Axis2ModuleActivator
+    // needed because the stop methods in ReferenceImpl and ServiceImpl aren't being called
+    // TODO: revisit this as part of the lifecycle work
+    protected void destroy() {
+       for (ReferenceBinding binding : referenceBindings) {
+          binding.stop();
+       }
+       for (ServiceBinding binding : serviceBindings) {
+          binding.stop();
+       }
     }
 
 }

Added: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingConstants.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingConstants.java?view=auto&rev=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingConstants.java (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingConstants.java Thu Apr 26 10:36:16 2007
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.binding.rmi;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.assembly.xml.Constants;
+
+public interface RMIBindingConstants {
+
+    String BINDING_RMI = "binding.rmi";
+    QName BINDING_RMI_QNAME = new QName(Constants.SCA10_NS, BINDING_RMI);
+    String RMI_HOST = "host";
+    String RMI_PORT = "port";
+    String RMI_SERVICE = "serviceName";
+    
+    String COLON = ":";
+    String FWD_SLASH = "/";
+    String LOCAL_HOST = "localhost";
+}

Added: 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=auto&rev=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingFactory.java (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIBindingFactory.java Thu Apr 26 10:36:16 2007
@@ -0,0 +1,33 @@
+/*
+ * 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.binding.rmi;
+
+/**
+ * Factory for the RMI binding model.
+ */
+public interface RMIBindingFactory {
+
+    /**
+     * Creates a new RMI binding.
+     * 
+     * @return a new RMI binding
+     */
+    RMIBinding createWebServiceBinding();
+
+}

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIInvoker.java Thu Apr 26 10:36:16 2007
@@ -20,11 +20,11 @@
 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.extension.TargetInvokerExtension;
 
-import org.apache.tuscany.host.rmi.RMIHost;
-import org.apache.tuscany.host.rmi.RMIHostException;
-
 /**
  * Invoke an RMI reference.
  *
@@ -35,12 +35,10 @@
     private String host;
     private String port;
     private String svcName;
-    private RMIHost rmiHost;
+    private RMIHostExtensionPoint rmiHost;
     private Remote proxy;
 
-    public RMIInvoker(RMIHost rmiHost, String host, String port, String svcName, Method remoteMethod) {
-        super(null, null, null);
-        // assert remoteMethod.isAccessible();
+    public RMIInvoker(RMIHostExtensionPoint rmiHost, String host, String port, String svcName, Method remoteMethod) {
         this.remoteMethod = remoteMethod;
         this.host = host;
         this.port = port;
@@ -48,18 +46,30 @@
         this.rmiHost = rmiHost;
     }
 
-    public Object invokeTarget(Object payload, final short sequence) throws InvocationTargetException {
+    public Object invokeTarget(final Object payload, 
+                               final short sequence, 
+                               WorkContext workContext) throws InvocationTargetException {
         try {
             if (proxy == null) {
                 proxy = rmiHost.findService(host, port, svcName);
                 // proxy = Naming.lookup(serviceURI);
             }
-            return remoteMethod.invoke(proxy, (Object[]) payload);
+            
+            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);
         }
 

Added: 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=auto&rev=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIModuleActivator.java (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIModuleActivator.java Thu Apr 26 10:36:16 2007
@@ -0,0 +1,66 @@
+/*
+ * 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.binding.rmi;
+
+import java.util.Map;
+
+import org.apache.tuscany.binding.rmi.xml.RMIBindingProcessor;
+import org.apache.tuscany.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.core.ExtensionPointRegistry;
+import org.apache.tuscany.core.ModuleActivator;
+import org.apache.tuscany.rmi.DefaultRMIHostExtensionPoint;
+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 extensionPointRegistry) {
+
+        StAXArtifactProcessorExtensionPoint artifactProcessorRegistry = 
+            extensionPointRegistry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        artifactProcessorRegistry.addExtension(new RMIBindingProcessor());
+
+        RMIHostExtensionPoint rmiHost = 
+            extensionPointRegistry.getExtensionPoint(RMIHostExtensionPoint.class);
+        if (rmiHost == null) {
+            rmiHost = new DefaultRMIHostExtensionPoint();
+        }
+        
+        BuilderRegistry builderRegistry = extensionPointRegistry.getExtensionPoint(BuilderRegistry.class);
+        builder = new RMIBindingBuilder();
+        builder.setBuilderRegistry(builderRegistry);
+        builder.setRmiHost(rmiHost);
+        builder.init();
+    }
+
+    public void stop(ExtensionPointRegistry registry) {
+        // 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() {
+        return null;
+    }
+
+}

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReferenceBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReferenceBinding.java?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReferenceBinding.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIReferenceBinding.java Thu Apr 26 10:36:16 2007
@@ -17,76 +17,55 @@
 package org.apache.tuscany.binding.rmi;
 
 import java.lang.reflect.Method;
+import java.net.URI;
 
 import javax.xml.namespace.QName;
 
-import org.apache.tuscany.spi.component.CompositeComponent;
+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.RMIHostExtensionPoint;
+import org.apache.tuscany.spi.component.TargetInvokerCreationException;
 import org.apache.tuscany.spi.extension.ReferenceBindingExtension;
-import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findMethod;
-import org.apache.tuscany.spi.model.Operation;
-import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.wire.TargetInvoker;
 
-import org.apache.tuscany.host.rmi.RMIHost;
-
 /**
  * @version $Rev$ $Date$
  */
 public class RMIReferenceBinding extends ReferenceBindingExtension {
-    private static final QName BINDING_RMI = new QName(
-        "http://tuscany.apache.org/xmlns/binding/rmi/1.0-SNAPSHOT", "binding.rmi");
-
-    private final String host;
-
-    private final String port;
-
-    private final String svcName;
-
-    private RMIHost rmiHost;
-
-    public RMIReferenceBinding(String name,
-                               CompositeComponent parent,
-                               RMIHost rmiHost,
-                               String host,
-                               String port,
-                               String svcName) {
-        super(name, parent);
-        this.host = host;
-        this.port = port;
-        this.svcName = svcName;
+    private RMIHostExtensionPoint rmiHost;
+    
+    private RMIBinding rmiBindingDefn;
+    
+    public RMIReferenceBinding(URI name, 
+                               URI targetUri, 
+                               RMIBinding rmiBindingDefn, 
+                               RMIHostExtensionPoint rmiHost) {
+        super(name, targetUri);
+        this.rmiBindingDefn = rmiBindingDefn;
         this.rmiHost = rmiHost;
     }
 
-    public QName getBindingType() {
-        return BINDING_RMI;
-    }
+    public TargetInvoker createTargetInvoker(String targetName, 
+                                             Operation operation, 
+                                             boolean isCallback) throws TargetInvokerCreationException {
 
-    public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation) {
         try {
-            /*Remote proxy = getProxy();
-             Method remoteMethod = proxy.getClass().getMethod(operation.getName(),
-             (Class[]) operation.getParameterTypes());
-             return new RMIInvoker(proxy, remoteMethod);
-             */
-            Method method = findMethod(operation, contract.getInterfaceClass().getMethods());
-            Method remoteMethod =
-                getInboundWire().getServiceContract().getInterfaceClass().getMethod(operation.getName(), (Class[]) method.getParameterTypes());
-            return new RMIInvoker(rmiHost, host, port, svcName, remoteMethod);
+            Method remoteMethod = 
+                JavaInterfaceUtil.findMethod(((JavaInterface)wire.getTargetContract().getInterface()).getJavaClass(),
+                                                operation);
+            
+            return new RMIInvoker(rmiHost, 
+                                  rmiBindingDefn.getRmiHostName(), 
+                                  rmiBindingDefn.getRmiPort(), 
+                                  rmiBindingDefn.getRmiServiceName(), 
+                                  remoteMethod);
         } catch (NoSuchMethodException e) {
             throw new NoRemoteMethodException(operation.toString(), e);
         }
     }
 
-    /*protected Remote getProxy() {
-    try {
-    // todo do we need to cache this result?
-    return Naming.lookup(uri);
-    } catch (NotBoundException e) {
-    throw new NoRemoteServiceException(uri);
-    } catch (MalformedURLException e) {
-    throw new NoRemoteServiceException(uri);
-    } catch (RemoteException e) {
-    throw new NoRemoteServiceException(uri);
+    public QName getBindingType() {
+        return RMIBindingConstants.BINDING_RMI_QNAME;
     }
-    }*/
 }

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIRuntimeException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIRuntimeException.java?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIRuntimeException.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIRuntimeException.java Thu Apr 26 10:36:16 2007
@@ -16,12 +16,10 @@
  */
 package org.apache.tuscany.binding.rmi;
 
-import org.apache.tuscany.api.TuscanyRuntimeException;
 
 /**
- * @version $Rev$ $Date$
  */
-public abstract class RMIRuntimeException extends TuscanyRuntimeException {
+public abstract class RMIRuntimeException extends RuntimeException {
     protected RMIRuntimeException() {
     }
 

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIServiceBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIServiceBinding.java?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIServiceBinding.java (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/RMIServiceBinding.java Thu Apr 26 10:36:16 2007
@@ -16,60 +16,64 @@
  */
 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 javax.xml.namespace.QName;
 
-import org.apache.tuscany.spi.component.CompositeComponent;
-import org.apache.tuscany.spi.extension.ServiceBindingExtension;
-import org.apache.tuscany.spi.wire.WireService;
+import javax.xml.namespace.QName;
 
 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 org.apache.tuscany.host.rmi.RMIHost;
-import org.apache.tuscany.host.rmi.RMIHostException;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+
+import org.apache.tuscany.core.component.SimpleWorkContext;
+import org.apache.tuscany.interfacedef.Interface;
+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.TargetInvokerCreationException;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.component.WorkContextTunnel;
+import org.apache.tuscany.spi.extension.ServiceBindingExtension;
+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;
 
 /**
  * @version $Rev$ $Date$
  */
-public class RMIServiceBinding<T extends Remote> extends ServiceBindingExtension {
-    private static final QName BINDING_RMI = new QName(
-        "http://tuscany.apache.org/xmlns/binding/rmi/1.0-SNAPSHOT", "binding.rmi");
-
-    public static final String URI_PREFIX = "//localhost";
-    public static final String SLASH = "/";
-    public static final String COLON = ":";
-    //private final String host;
-    private final String port;
-    private final String serviceName;
-    private RMIHost rmiHost;
+public class RMIServiceBinding<T extends Remote> extends ServiceBindingExtension implements MethodInterceptor { 
+    private RMIBinding rmiBinding;
+    private RMIHostExtensionPoint rmiHost;
 
     // 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 Class serviceInterface;
-    private WireService wireService;
-
-    public RMIServiceBinding(String name,
-                             CompositeComponent parent,
-                             WireService wireService,
-                             RMIHost rHost,
-                             String host,
-                             String port,
-                             String svcName,
-                             Class<T> service) {
-        super(name, parent);
-
-        this.serviceInterface = service;
+    private Interface serviceInterface;
+    
+    public RMIServiceBinding(URI name,
+                             RMIBinding rmiBinding,
+                             RMIHostExtensionPoint rHost,
+                             Interface svcIfc) {
+        super(name);
+        //this.serviceInterface = service;
         this.rmiHost = rHost;
-        //this.host = host;
-        this.port = port;
-        this.serviceName = svcName;
-        this.wireService = wireService;
+        this.rmiBinding = rmiBinding;
+        this.serviceInterface = svcIfc;
+        
+        start(); // TODO: hack while start isn't getting called by runtime
     }
 
     public void start() {
@@ -77,11 +81,9 @@
         Remote rmiProxy = createRmiService();
 
         try {
-            // startRMIRegistry();
-            rmiHost.registerService(serviceName,
-                getPort(port),
-                rmiProxy);
-            // bindRmiService(uri,rmiProxy);
+            rmiHost.registerService(rmiBinding.getRmiServiceName(),
+                                    getPort(rmiBinding.getRmiPort()),
+                                    rmiProxy);
         } catch (RMIHostException e) {
             throw new NoRemoteServiceException(e);
         }
@@ -89,7 +91,8 @@
 
     public void stop() {
         try {
-            rmiHost.unregisterService(serviceName, getPort(port));
+            rmiHost.unregisterService(rmiBinding.getRmiServiceName(), 
+                                      getPort(rmiBinding.getRmiPort()));
         } catch (RMIHostException e) {
             throw new NoRemoteServiceException(e.getMessage());
         }
@@ -99,22 +102,21 @@
     protected Remote createRmiService() {
         Enhancer enhancer = new Enhancer();
         enhancer.setSuperclass(UnicastRemoteObject.class);
-        enhancer.setCallback(new RemoteMethodHandler(wireService.createHandler(serviceInterface, getInboundWire()),
-            serviceInterface));
-
-        if (!Remote.class.isAssignableFrom(serviceInterface)) {
+        enhancer.setCallback(this);
+        Class targetJavaInterface = getTargetJavaClass(serviceInterface);
+        if (!Remote.class.isAssignableFrom(targetJavaInterface)) {
             RMIServiceClassLoader classloader =
                 new RMIServiceClassLoader(getClass().getClassLoader());
-            final byte[] byteCode = generateRemoteInterface(serviceInterface);
-            serviceInterface = classloader.defineClass(byteCode);
+            final byte[] byteCode = generateRemoteInterface(targetJavaInterface);
+            targetJavaInterface = classloader.defineClass(byteCode);
             enhancer.setClassLoader(classloader);
         }
-        enhancer.setInterfaces(new Class[]{serviceInterface});
+        enhancer.setInterfaces(new Class[]{targetJavaInterface});
         return (Remote) enhancer.create();
     }
 
     protected int getPort(String port) {
-        int portNumber = RMIHost.RMI_DEFAULT_PORT;
+        int portNumber = RMIHostExtensionPoint.RMI_DEFAULT_PORT;
         if (port != null && port.length() > 0) {
             portNumber = Integer.decode(port);
         }
@@ -156,7 +158,7 @@
     }
 
     public QName getBindingType() {
-        return BINDING_RMI;
+        return RMIBindingConstants.BINDING_RMI_QNAME;
     }
 
     private class RMIServiceClassLoader extends ClassLoader {
@@ -168,4 +170,76 @@
             return defineClass(null, byteArray, 0, byteArray.length);
         }
     }
+    
+    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 {
+        }
+    }
+    
+    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();
+    }
+    
+    public TargetInvoker createTargetInvoker(String targetName, Operation operation, boolean isCallback) throws TargetInvokerCreationException {
+        return null;
+    }
+
+
 }

Added: 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/impl/DefaultRMIBindingFactory.java?view=auto&rev=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/DefaultRMIBindingFactory.java (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/DefaultRMIBindingFactory.java Thu Apr 26 10:36:16 2007
@@ -0,0 +1,35 @@
+/*
+ * 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.binding.rmi.impl;
+
+import org.apache.tuscany.binding.rmi.RMIBinding;
+import org.apache.tuscany.binding.rmi.RMIBindingFactory;
+
+/**
+ * A factory for the WSDL model.
+ * 
+ * @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();
+    }
+
+}

Added: 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/impl/RMIBindingImpl.java?view=auto&rev=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/RMIBindingImpl.java (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/binding/rmi/impl/RMIBindingImpl.java Thu Apr 26 10:36:16 2007
@@ -0,0 +1,91 @@
+/**
+ *
+ * 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.impl;
+
+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.
+ *
+ * @version $Rev: 490475 $ $Date: 2006-12-27 15:53:42 +0530 (Wed, 27 Dec 2006) $
+ */
+public class RMIBindingImpl extends BindingImpl implements RMIBinding, RMIBindingConstants {
+    private String host;
+
+    private String port;
+
+    private String serviceName;
+
+    public String getURI() {
+        return host + COLON + port + serviceName;
+    }
+
+    public String getRmiHostName() {
+        if (host == null) {
+            extractFromUri();
+        }
+        return host;
+    }
+
+    public void setRmiHostName(String host) {
+        this.host = host;
+    }
+
+    public String getRmiPort() {
+        if (port == null) {
+            extractFromUri();
+        }
+        return port;
+    }
+
+    public void setRmiPort(String port) {
+        this.port = port;
+    }
+
+    public String getRmiServiceName() {
+        if (serviceName == null) {
+            extractFromUri();
+        }
+        return serviceName;
+    }
+
+    public void setRmiServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+    
+    private void extractFromUri() {
+        if (getURI() != null && getURI().length() > 0) {
+            int colonIndex = getURI().indexOf(COLON);
+            if (colonIndex != -1) {
+                setRmiHostName(getURI().substring(0, colonIndex));
+                setRmiPort(getURI().substring(colonIndex + 1));
+            } 
+            
+            int slashIndex = getURI().indexOf(FWD_SLASH);
+            if (slashIndex != -1) {
+                if (colonIndex == -1) {
+                    setRmiHostName(getURI().substring(0, slashIndex));
+                }
+                setRmiServiceName(getURI().substring(slashIndex + 1));
+            } else {
+                setRmiServiceName(getURI());
+            }
+        }
+    }
+}

Added: incubator/tuscany/java/sca/modules/binding-rmi/src/main/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/main/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator?view=auto&rev=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/main/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator (added)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/main/resources/META-INF/services/org.apache.tuscany.core.ModuleActivator Thu Apr 26 10:36:16 2007
@@ -0,0 +1,2 @@
+# Implementation class for the ExtensionActivator
+org.apache.tuscany.binding.rmi.RMIModuleActivator

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=532812&r1=532811&r2=532812
==============================================================================
--- 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 Thu Apr 26 10:36:16 2007
@@ -20,6 +20,7 @@
 
 import org.osoa.sca.annotations.Service;
 
+
 /**
  * This class implements the HelloWorld service.
  */

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=532812&r1=532811&r2=532812
==============================================================================
--- 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 Thu Apr 26 10:36:16 2007
@@ -18,33 +18,39 @@
  */
 package org.apache.tuscany.binding.rmi;
 
-import junit.framework.TestCase;
+import helloworld.HelloWorldRmiService;
+import junit.framework.Assert;
 
-// TODO: renamed to XXX as it doesn't work for me
-public class BindingTestCase extends TestCase {
-//    private HelloWorldRmiService helloWorldRmiService;
+import org.apache.tuscany.host.embedded.SCARuntime;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.osoa.sca.CurrentCompositeContext;
+
+public class BindingTestCase {
+    private static HelloWorldRmiService helloWorldRmiService;
  
+    @Test
     public void testRmiService() {
-//        System.out.println(helloWorldRmiService.sayRmiHello("Tuscany World!"));
-//        assertEquals("Hello from the RMI Service to - Tuscany World! thro the RMI Reference",
-//                helloWorldRmiService.sayRmiHello("Tuscany World!"));
+        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!"));
     }
 
-//    protected void setUp() throws Exception {
-//        addExtension("rmi.binding",
-//                     getClass().getClassLoader().getResource("META-INF/sca/rmi_extension.scdl"));
-//        setApplicationSCDL(getClass().getClassLoader().getResource("META-INF/sca/default.scdl"));
-//
-//        super.setUp();
-//
-//        CompositeContext context = CurrentCompositeContext.getContext();
-//        helloWorldRmiService = context.locateService(HelloWorldRmiService.class,
-//                                                     "HelloWorldRmiServiceComponent");
-//    }
-
 
-//    protected void tearDown() throws Exception {
-//        super.tearDown();
-//    }
+    
+    @BeforeClass
+    public static void init() throws Exception {
+        SCARuntime.start("META-INF/sca/RMIBindingTest.composite");
+        helloWorldRmiService = 
+            CurrentCompositeContext.getContext().locateService(HelloWorldRmiService.class,
+                                                                "HelloWorldRmiServiceComponent");
+       
+    }
+    
+    @AfterClass
+    public static void destroy() throws Exception {
+        SCARuntime.stop();
+    }
 
 }

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldImpl.componentType
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldImpl.componentType?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldImpl.componentType (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldImpl.componentType Thu Apr 26 10:36:16 2007
@@ -16,11 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.    
 -->
-
-<?xml version="1.0" encoding="ASCII"?>
-
 <componentType xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-
     <service name="HelloWorldService">
         <interface.java interface="helloworld.HelloWorldService"/>
     </service>

Modified: incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldRmiImpl.componentType
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldRmiImpl.componentType?view=diff&rev=532812&r1=532811&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldRmiImpl.componentType (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/HelloWorldRmiImpl.componentType Thu Apr 26 10:36:16 2007
@@ -16,8 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.    
 -->
-<?xml version="1.0" encoding="ASCII"?>
-
 <componentType xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 
     <service name="HelloWorldRmiService">

Copied: incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/RMIBindingTest.composite (from r532247, incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/default.scdl)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/RMIBindingTest.composite?view=diff&rev=532812&p1=incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/default.scdl&r1=532247&p2=incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/RMIBindingTest.composite&r2=532812
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/default.scdl (original)
+++ incubator/tuscany/java/sca/modules/binding-rmi/src/test/resources/META-INF/sca/RMIBindingTest.composite Thu Apr 26 10:36:16 2007
@@ -21,10 +21,10 @@
            xmlns:rmi="http://tuscany.apache.org/xmlns/binding/rmi/1.0-SNAPSHOT"
            name="HelloWorldRmiComposite">
 
-	<service name="HelloWorldRmiService" target="HelloWorldServiceComponent">
+	<service name="HelloWorldRmiService" promote="HelloWorldServiceComponent">
         <interface.java interface="helloworld.HelloWorldService"/>
-        <rmi:binding.rmi host="localhost" port="8099" serviceName="HelloWorldRemoteService"   />
-        <reference>HelloWorldServiceComponent</reference>
+        <binding.rmi host="localhost" port="8099" serviceName="HelloWorldRemoteService"   />
+        <reference target="HelloWorldServiceComponent">HelloWorldServiceComponent</reference>
     </service>
       
     <component name="HelloWorldServiceComponent">
@@ -33,12 +33,12 @@
   
    <component name="HelloWorldRmiServiceComponent">
         <implementation.java class="helloworld.HelloWorldRmiImpl"/>
-        <reference name="extService" target="HelloWorldRmiReference">HelloWorldRmiReference</reference>
+        <reference name="extService"></reference>
     </component>        
            
-  	<reference name="HelloWorldRmiReference" target="Nothing">
+  	<reference name="HelloWorldRmiReference" promote="HelloWorldRmiServiceComponent/extService">
         <interface.java interface="helloworld.HelloWorldService"/>
-        <rmi:binding.rmi host="localhost" port="8099" serviceName="HelloWorldRemoteService"   />
+        <binding.rmi host="localhost" port="8099" serviceName="HelloWorldRemoteService"   />
     </reference>
 
 </composite>



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