Java之RMI設計模式基本原理與示例
1. Name
RMI是Romote Method Invocation的縮寫,就是遠端方法呼叫。
2. Intent
具體的說,就是能夠通過這種機制,實現在一個JVM上呼叫另一個JVM上的Java物件的方法。
3. Structure
(1)RMI Interface and Class
第一步:繼承了Remote的interface
定義一個繼承了Remote的interface,命名為TestRMIService。在其中有我們期望在Client端呼叫的方法testHello(),注意要丟擲RemoteException。
第二步:繼承了UnicastRemoteObject且實現了TestRMIService的class
定義一個繼承了UnicastRemoteObject且實現了TestRMIService的class,命名為TestRMIServiceImpl。在其中實現testHello方法。
(2)RMI Server
第一步:
定義一個class,命名為TestServer,其中有main方法。在main方法中例項化TestRMIService一個遠端物件,命名為testRMI。
第二步:
建立一個Registry,並向遠端物件testRMI註冊,註冊名為“rmi://locahost:1234/testrmi”。
(3)RMI Client
第一步:
定義一個class,命名為TestClient,其中有main方法。查詢註冊
第二步:
查詢註冊名為“rmi://locahost:1234/testrmi”的TestRMIService遠端物件,查詢結果為testRMI。
第三步:
呼叫遠端物件testRMI的方法testHello。
4. Sample Code
(1)TestRMIService
package com.sinosuperman.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface TestRMIService extends Remote {
public String testHello() throws RemoteException;
}
(2)TestRMIServiceImpl
package com.sinosuperman.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class TestRMIServiceImpl extends UnicastRemoteObject implements TestRMIService {
private static final long serialVersionUID = -9039976499370682232L;
public TestRMIServiceImpl() throws RemoteException {
}
@Override
public String testHello() throws RemoteException {
return "I'm RMI, Hello World!";
}
}
(3)TestServer
package com.sinosuperman.server;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import com.sinosuperman.rmi.TestRMIService;
import com.sinosuperman.rmi.TestRMIServiceImpl;
public class TestServer {
public static void main(String[] args) {
try {
/* Create a Remote object. */
TestRMIService testRMI = new TestRMIServiceImpl();
/* Create a registry object with 1234 port. */
LocateRegistry.createRegistry(1234);
/* Register the Remote object to RMI registry server, and name it as testrmi. */
Naming.bind("rmi://localhost:1234/testrmi", testRMI);
System.out.println("註冊遠端物件成功");
} catch (RemoteException e) {
System.out.println("遠端物件建立異常");
e.printStackTrace();
} catch (MalformedURLException e) {
System.out.println("URL畸形異常");
e.printStackTrace();
} catch (AlreadyBoundException e) {
System.out.println("重複繫結異常");
e.printStackTrace();
}
}
}
(4)TestClient
package com.sinosuperman.rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class TestRMIClient {
public static void main(String[] args) {
try {
TestRMIService testService = (TestRMIService) Naming.lookup("rmi://localhost:1234/testrmi");
System.out.println(testService.testHello());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
5. Test
(1)執行TestServer
在Eclipse主介面的Package Explorer中你所建立的測試RMI的工程中的com.sinosuperman包中,右擊TestServer,選擇Run As,選擇Java Application。
這時介面上會顯示:
“註冊遠端物件成功”
(2)執行TestClient
在Eclipse主介面的Package Explorer中你所建立的測試RMI的工程中的com.sinosuperman.rmi包中,右擊TestClient,選擇Run As,選擇Java Application。
這時介面上會顯示:
“I'm RMI, Hello World!”
相關文章
- Java設計模式之策略模式示例Java設計模式
- Java設計模式之外觀模式示例Java設計模式
- 《JAVA與設計模式》之單例模式Java設計模式單例
- 好程式設計師Java培訓分享之RMI與RPC的區別程式設計師JavaRPC
- JAVA設計模式之策略模式Java設計模式
- Java設計模式之builder模式Java設計模式UI
- Java設計模式之代理模式Java設計模式
- 設計模式之----Java模板模式設計模式Java
- JAVA設計模式之命令模式Java設計模式
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- Java設計模式之介面卡設計模式Java設計模式
- Java設計模式系列之單例設計模式Java設計模式單例
- JAVA設計模式之 13.命令設計模式Java設計模式
- Java RMI之HelloWorld篇Java
- Java設計模式之工廠模式Java設計模式
- Java 設計模式之《觀察者模式》Java設計模式
- Java設計模式之單例模式Java設計模式單例
- Java設計模式之(五)——代理模式Java設計模式
- Java設計模式之(十四)——策略模式Java設計模式
- JAVA設計模式之建造者模式Java設計模式
- Java設計模式之狀態模式Java設計模式
- Java設計模式之原型模式Java設計模式原型
- Java設計模式之觀察者模式Java設計模式
- Java設計模式之代理模式(Proxy)Java設計模式
- Java設計模式之策略模式(Strategy)Java設計模式
- Java設計模式之模板模式(Template )Java設計模式
- Java程式設計之設計模式之工廠方法模式全解Java程式設計設計模式
- JAVA設計模式之責任鏈模式Java設計模式
- Java設計模式之介面卡模式Java設計模式
- Java設計模式之工廠方法模式Java設計模式
- 折騰Java設計模式之命令模式Java設計模式
- Java設計模式之裝飾者模式Java設計模式
- 14.java設計模式之命令模式Java設計模式
- 12.java設計模式之代理模式Java設計模式
- java設計模式之裝飾器模式Java設計模式
- 13.java設計模式之模板模式Java設計模式
- Java設計模式之(二)——工廠模式Java設計模式
- Java設計模式之(三)——建造者模式Java設計模式