JAva RMI単純実装構造
2173 ワード
Javaが提供するRMIメカニズムによって、分布式サービスのシステムを実現することができ、簡単なRMI実現のシステムの構造は以下の通りである.
UnicastRemoteObjectはjavaが提供するクラスであり、継承して実装を書けばよい.このクラスはRMI通信の多くの詳細をカプセル化している.Remoteクラスもそうだ.
APPInterfaceはclientに提供されるインタフェースであり、サービス側の具体的な実装を隠すことができる.
APPinterfaceImplementationはAPPInterfaceインタフェースのクラスを実現し、サービス側に保持し、このクラスに具体的な方法の実現を書く.インタフェース定義の方法を実現する以外に、
内部呼び出しや管理のための他の方法を別途書くこともできます.
Clientクラスはregisterにサービスを検索し、APPInterfaceを介してサービス側にメソッド呼び出し要求を送信します.
serverクラスはregisterにサービスを登録し、APPInterfaceImplementationクラスを対応するサービス名にバインドし、サービス名をregisterに登録することでclientが
registerで対応するサービスを検索し、リモートメソッド呼び出しを行います.
简単に叶えた
UnicastRemoteObjectはjavaが提供するクラスであり、継承して実装を書けばよい.このクラスはRMI通信の多くの詳細をカプセル化している.Remoteクラスもそうだ.
APPInterfaceはclientに提供されるインタフェースであり、サービス側の具体的な実装を隠すことができる.
APPinterfaceImplementationはAPPInterfaceインタフェースのクラスを実現し、サービス側に保持し、このクラスに具体的な方法の実現を書く.インタフェース定義の方法を実現する以外に、
内部呼び出しや管理のための他の方法を別途書くこともできます.
Clientクラスはregisterにサービスを検索し、APPInterfaceを介してサービス側にメソッド呼び出し要求を送信します.
serverクラスはregisterにサービスを登録し、APPInterfaceImplementationクラスを対応するサービス名にバインドし、サービス名をregisterに登録することでclientが
registerで対応するサービスを検索し、リモートメソッド呼び出しを行います.
简単に叶えた
//SimpleRMIInterface.java
import java.rmi.Remote;
public interface SimpleRMIInterface extends java.rmi.Remote {
public String SimpleRMIHello(String name) throws java.rmi.RemoteException;
}
//javac SimpleRMIInterface.java
//SimpleRMIImpl.java
import java.rmi.server.UnicastRemoteObject;
public class SimpleRMIImpl extends UnicastRemoteObject implements SimpleRMIInterface {
public SimpleRMIImpl() throws java.rmi.RemoteException {
super();
}
public String SimpleRMIHello(String name) throws java.rmi.RemoteException {
return "hello " + name;
}
}
//javac SimpleRMIImpl.java
//rmic SimpleRMIImpl
//SimpleRMIServer.java
import java.rmi.Naming;
public class SimpleRMIServer {
public SimpleRMIServer() {
try {
SimpleRMIInterface simpleRMIObj = new SimpleRMIImpl();
Naming.rebind("rmi://localhost:10099/SimpleRMIService", simpleRMIObj);
} catch(Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
new SimpleRMIServer();
}
}
//SimpleRMIClient.java
import java.rmi.Naming;
public class SimpleRMIClient {
public static void main(String[] args) {
try {
String hostName = "localhost";
String port = "1099";
String registeryURL = "rmi://" + hostName + ":" + port + "/SimpleRMIService";
SimpleRMIInterface simpleRMIObj = (SimpleRMIInterface)Naming.lookup(registeryURL);
System.out.println(simpleRMIObj.SimpleRMIHello("world"));
} catch (Exception e) {
System.out.println(e);
}
}
}