在TUSCANY SCA JAVA (二)中所實現的電腦中所有的訪問都是本地,產生的所有構件,調用構件都是在本地tuscany容器中進行的,下面我來進行遠程調用,這才是tuscany的真正長處所在。我們還是利用TUSCANY
SCA JAVA (二)中的代碼,只需要修改和.composite檔案和增加一個服務端和用戶端的類就可以進行測試了。
在這裡我們計算機構件綁定為RMI服務,只續修改之前的.composite檔案而已,如下:
Culcalator.composite
<?xml version="1.0" encoding="UTF-8"?><composite xmlns="http://www.osoa.org/xmlns/sca/1.0"xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"targetNamespace="http://calc"xmlns:c="http://calc"name="Calculator" ><component name="CalculatorServiceComponent"><implementation.java class="com.ajun.tuscany.server.Calculator" /><service name="Calculator"><interface.java interface="com.ajun.tuscany.server.ICalculator"/><tuscany:binding.rmi port="8099" host="localhost" serviceName="CalculatorRMIService" /></service><reference name="add" target="AddComponent"/><reference name="subtract" target="SubtractComponent"/><reference name="multiply" target="MultiplyComponent"/><reference name="divide" target="DivideComponent"/></component><component name="AddComponent"><implementation.java class="com.ajun.tuscany.server.Add" /></component><component name="SubtractComponent"><implementation.java class="com.ajun.tuscany.server.Subtract" /></component><component name="MultiplyComponent"><implementation.java class="com.ajun.tuscany.server.Multiply" /></component><component name="DivideComponent"><implementation.java class="com.ajun.tuscany.server.Divide" /></component></composite>
綁定為RMI服務只需添加
<service name="Calculator">
<interface.java interface="com.ajun.tuscany.server.ICalculator"/>
<tuscany:binding.rmi port="8099" host="localhost" serviceName="CalculatorRMIService" />
</service>
服務的名稱為:Calculator 這裡必須和你的實作類別一個名字,需要注意一下
<interface.java interface="com.ajun.tuscany.server.ICalculator"/> 透漏給外部存取的介面
<tuscany:binding.rmi port="8099" host="localhost" serviceName="CalculatorRMIService" /> RMI服務端ip和連接埠號碼、RMI服務的服務名稱,以後供外界訪問的名字
這樣就將電腦構件綁定為RMI服務了。
編寫一個服務類來啟動RMI服務。
CalculatorRMIServer.java
package com.ajun.tuscany.server;import java.io.IOException;import org.apache.tuscany.sca.host.embedded.SCADomain;/** * RMI服務端啟動 * @author ajun * @e-mail zhaojun2066@gmail.com * @blog http://blog.csdn.net/ajun_studio * @version 建立時間:2012-7-23 下午9:44:32 */public class CalculatorRMIServer {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {System.out.println("將SCA組件作為RMI介面供外界訪問.......");SCADomain domain = SCADomain.newInstance("com/ajun/tuscany/server/Calculator.composite");System.out.println("斷行符號鍵推車.......");System.in.read();domain.close();System.out.println("退出.......");System.exit(0);}}
運行上面的類出現一下資訊:
將SCA組件作為RMI介面供外界訪問.......2012-7-23 22:32:10 org.apache.tuscany.sca.node.impl.NodeImpl <init>資訊: Creating node: com/ajun/tuscany/server/Calculator.composite2012-7-23 22:32:12 org.apache.tuscany.sca.node.impl.NodeImpl configureNode資訊: Loading contribution: file:/E:/springdm/Calculator_rmi/bin/2012-7-23 22:32:14 org.apache.tuscany.sca.node.impl.NodeImpl start資訊: Starting node: com/ajun/tuscany/server/Calculator.composite斷行符號鍵推出.......
用戶端代碼:CalculatorRMIClient.java
package com.ajun.tuscany.client;import java.net.MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;import com.ajun.tuscany.server.ICalculator;/** * RMI用戶端 * @author ajun * @e-mail zhaojun2066@gmail.com * @blog http://blog.csdn.net/ajun_studio * @version 建立時間:2012-7-23 下午9:44:44 */public class CalculatorRMIClient {/** * @param args * @throws NotBoundException * @throws RemoteException * @throws MalformedURLException */public static void main(String[] args) throws MalformedURLException, RemoteException, NotBoundException {ICalculator c= (ICalculator) Naming.lookup("//localhost:8099/CalculatorRMIService");System.out.println("3 + 2 = "+c.add(3, 2));System.out.println("3 - 2 = "+c.subtract(3, 2));System.out.println("3 * 2 = "+c.multiply(3, 2));System.out.println("3 / 2 = "+c.divide(3, 2));}}
運行以上代碼:
3 + 2 = 5.03 - 2 = 1.03 * 2 = 6.03 / 2 = 1.5
代碼結構如下:其餘代碼參考TUSCANY SCA JAVA (二)