JAva RMI単純実装構造

2173 ワード

Javaが提供するRMIメカニズムによって、分布式サービスのシステムを実現することができ、簡単なRMI実現のシステムの構造は以下の通りである.
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);
		}
	}
}