I've ported a subset of this change to equinox branch, with no host, port, and serviceName attributes for now, as the logic added to the RMIBinding model seemed to create side effects (calling setURI resets the host and port, making the final state dependent on the order in which setter methods are executed).

[EMAIL PROTECTED] wrote:
Author: rfeng
Date: Wed Sep 17 18:33:03 2008
New Revision: 696531

URL: http://svn.apache.org/viewvc?rev=696531&view=rev
Log:
Support the rmi:// uri for binding.rmi

Modified:
    
tuscany/java/sca/modules/assembly-xsd/src/main/resources/tuscany-sca-binding-rmi.xsd
    
tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/impl/RMIBindingImpl.java
    
tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java
    
tuscany/java/sca/modules/binding-rmi/src/test/resources/RMIBindingTest.composite

Modified: 
tuscany/java/sca/modules/assembly-xsd/src/main/resources/tuscany-sca-binding-rmi.xsd
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly-xsd/src/main/resources/tuscany-sca-binding-rmi.xsd?rev=696531&r1=696530&r2=696531&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/assembly-xsd/src/main/resources/tuscany-sca-binding-rmi.xsd
 (original)
+++ 
tuscany/java/sca/modules/assembly-xsd/src/main/resources/tuscany-sca-binding-rmi.xsd
 Wed Sep 17 18:33:03 2008
@@ -36,7 +36,7 @@
                 </sequence>
                         <attribute name="host" type="anyURI" use="optional"/>
                         <attribute name="port" type="int" use="optional"/>
-                        <attribute name="serviceName" type="anyURI" 
use="required"/>
+                        <attribute name="serviceName" type="anyURI" 
use="optional"/>
             </extension>
         </complexContent>
     </complexType>

Modified: 
tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/impl/RMIBindingImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/impl/RMIBindingImpl.java?rev=696531&r1=696530&r2=696531&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/impl/RMIBindingImpl.java
 (original)
+++ 
tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/impl/RMIBindingImpl.java
 Wed Sep 17 18:33:03 2008
@@ -18,6 +18,9 @@
  */
 package org.apache.tuscany.sca.binding.rmi.impl;
+import java.net.URI;
+import java.net.URISyntaxException;
+
 import org.apache.tuscany.sca.binding.rmi.RMIBinding;
/**
@@ -81,6 +84,7 @@
     }
public String getURI() {
+        compose();
         return uri;
     }
@@ -90,6 +94,7 @@ public void setURI(String uri) {
         this.uri = uri;
+        parse(uri);
     }
@@ -105,5 +110,48 @@
     public Object clone() throws CloneNotSupportedException {
         return super.clone();
} + + /*
+    rmi://[host][:port][/[object]]
+    rmi:[/][object]
+    */
+    private void parse(String uriStr) {
+        if (uriStr == null) {
+            return;
+        }
+        URI uri = URI.create(uriStr);
+        if (host == null) {
+            this.host = uri.getHost();
+        }
+        if (port == null) {
+            this.port = String.valueOf(uri.getPort());
+        }
+        if (serviceName == null) {
+            String path = uri.getPath();
+            if (path != null && path.charAt(0) == '/') {
+                path = path.substring(1);
+            }
+            this.serviceName = path;
+        }
+    }
+ + private void compose() {
+        if (uri == null) {
+            int p = -1;
+            if (port != null && port.length() > 0) {
+                p = Integer.decode(port);
+            }
+            String path = serviceName;
+            if (path != null) {
+                path = "/" + path;
+            }
+            try {
+                uri = new URI("rmi", null, host, p, path, null, 
null).toString();
+            } catch (URISyntaxException e) {
+                throw new IllegalArgumentException(e);
+            }
+        }
+    }
+
}

Modified: 
tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java?rev=696531&r1=696530&r2=696531&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java
 (original)
+++ 
tuscany/java/sca/modules/binding-rmi/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java
 Wed Sep 17 18:33:03 2008
@@ -94,6 +94,9 @@
         int portNumber = RMIHost.RMI_DEFAULT_PORT;
         if (port != null && port.length() > 0) {
             portNumber = Integer.decode(port);
+            if (portNumber == -1) {
+                portNumber = RMIHost.RMI_DEFAULT_PORT;
+            }
         }
         return portNumber;
     }

Modified: 
tuscany/java/sca/modules/binding-rmi/src/test/resources/RMIBindingTest.composite
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-rmi/src/test/resources/RMIBindingTest.composite?rev=696531&r1=696530&r2=696531&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/binding-rmi/src/test/resources/RMIBindingTest.composite
 (original)
+++ 
tuscany/java/sca/modules/binding-rmi/src/test/resources/RMIBindingTest.composite
 Wed Sep 17 18:33:03 2008
@@ -23,7 +23,7 @@
<service name="HelloWorldRmiService" promote="HelloWorldServiceComponent">
         <interface.java interface="helloworld.HelloWorldService"/>
-        <tuscany:binding.rmi host="localhost" port="8099" 
serviceName="HelloWorldRemoteService"   />
+        <tuscany:binding.rmi uri="rmi://localhost:8099/HelloWorldRemoteService"   
/>
     </service>
<component name="HelloWorldServiceComponent">




--
Jean-Sebastien

Reply via email to