RMIを使用してみた。但しスタブを生成せずに利用してみる

インターフェースを作成

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Sample extends Remote {
    String say() throws RemoteException;
}

実装クラスを作成

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class SampleImpl extends UnicastRemoteObject implements Sample {

    public SampleImpl() throws Exception {
        super();
    }

    public String say() throws RemoteException {
        return "hoge";
    }
}

RMIサーバークラスを作成

import java.rmi.RMISecurityManager;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;

public class Server {
    public static void main(String[] args) throws Exception {
        System.setSecurityManager(new RMISecurityManager());
        Registry reg = LocateRegistry.createRegistry(9999);
        reg.rebind("sample", new SampleImpl());
    }
}

クライアントクラスを作成

import java.rmi.RMISecurityManager;
import java.rmi.Naming;
import java.rmi.registry.*;

public class Client {
    public static void main(String[] args) throws Exception {
        System.setSecurityManager(new RMISecurityManager());
        Registry reg = LocateRegistry.getRegistry("localhost", 9999);

        Sample smp = (Sample)reg.lookup("sample");
        System.out.println(smp.say());
    }
}

実行する前にセキュリティポリシーファイルを作成

grant {
    permission java.security.AllPermission;
};

実行

# サーバー起動
java -Djava.security.policy=java.policy Server

# クライアント起動
java -Djava.security.policy=java.policy Client