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