PC-1対PC-2の場合のサンプル。
今まで、rmiregistryコマンドでレジストリサーバを別で立てていたが
サーバ側のソースでレジストリサーバを立てられる。
以下、サンプル
サーバ側
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
public class HelloServer extends UnicastRemoteObject implements Hello {public HelloServer () throws RemoteException {
}public String sayHello() {
return "Hello, RMI World!";
}public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}try {
int registryPort = 1100;Hello hello = new HelloServer ();
Registry registry = LocateRegistry.createRegistry(registryPort);
registry.rebind("HelloObject", hello);
// Naming.rebind("HelloObject", hello);
} catch (Exception e) {
e.printStackTrace();
}
}
}
クライアント側
import java.rmi.RMISecurityManager;
import java.rmi.Naming;public class HelloClient {
public static void main(String[] args) {
Hello hello;
try {
System.setSecurityManager(new RMISecurityManager());hello = (Hello)Naming.lookup("rmi://XXX.XXX.XXX.XXX:1100/HelloObject");
System.out.println(hello.sayHello());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Naming.lookup先にアドレスとポートまで指定している。
ポート指定しないとエラー出力するため。
【手順】
1. サーバの起動。
java -Djava.security.policy=java.policy -Djava.rmi.server.codebase=file:///src/java/Rmi3/bin/ -Djava.rmi.server.hostname=XXX.XXX.XXX.XXX HelloServer
2. クライアントの起動
前と同じコマンド『java -Djava.security.policy=java.policy HelloClient』。
でRMIが実現できる。
rmiregistryコマンドがない分、手順は楽だが
何か違いがあるのかも知れない。
それはまた今度、調査してみる。