Rmi 3

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コマンドがない分、手順は楽だが
何か違いがあるのかも知れない。

それはまた今度、調査してみる。