实现远程方法调用非常简单,只需要实现以下6个步骤。
(1)定义一个远程接口的接口,该接口的每一个方法必须声明它将产生一个RemoteException异常
(2)定义一个实现该接口的类
(3)使用RMIC程序生成远程实现所需的残根和框架
(4)创建安全策略
(5)使用rmiregistry注册表注册该远程对象并启动服务器对象
(6)创建一个客户程序和服务器进行RMI调用
1. 定义远程接口
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RemoteInterface extends Remote {
public String find(String msg) throws RemoteException;
}
2. 实现远程接口的类
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Vector;
public class RMIServer extends UnicastRemoteObject implements
RemoteInterface {
Vector<String> data = new Vector<String>();
/**
* @param args
*/
public RMIServer() throws RemoteException {
super();
initialize();
try {
if(System.getSecurityManager()==null){
System.setSecurityManager(new RMISecurityManager());
}
System.out.println("Set security manager.");
Naming.bind("//localhost/RMIServer", this);
System.out.println("RMITServer bound in registry.");
}
catch (Exception e){
e.printStackTrace();
}
}
public void initialize() {
data.add("a");
data.add("b");
data.add("c");
}
public String find(String msg) throws RemoteException {
String result = "Not found.";
for (int i = 0; i < data.size(); i++) {
String person = data.elementAt(i);
if(person.equals(msg)){
result = "Found";
}
}
return result;
}
public static void main(String[] args) {
try {
new RMIServer();
}
catch (Exception e){
System.out.println("main()");
e.printStackTrace();
}
}
}
3.运行rmic编译器
javac RMIServer.java
rmic RMIServer
4. 创建安全策略
在DOS窗口输入命令policytool并回车。单击【添加规则项目】->【添加权限】,在出现的窗口中的第一个下拉框选择【All permissions】,单击【确认】->【完成】
从File菜单中选择Save as,输入.java.policy,保存在登陆用户名的文件夹下。
5. 启动RMI注册表
rmiregistry
默认端口是1099,如果要使用新端口,可以rmiregistry <port> 。运行结果为:
Set Security Manager Success
RMIServer object bound in registry success
6. RMI客户端程序
import java.rmi.Naming;
public class RMIClient {
public String question = "";
/**
* @param args
*/
public RMIClient(String quest) {
question = quest;
try {
RemoteInterface remoteObject = (RemoteInterface) Naming
.lookup("//localhost/RMIServerClass");
System.out.println("remote object found. it is "
+ remoteObject.toString());
String reply = remoteObject.find(question);
System.out.println("remote object return result is: " + reply);
} catch (Exception e) {
}
}
public static void main(String[] args) {
if (args.length == 1) {
new RMIClient(args[0]);
} else {
System.out.println("please input on param.");
}
}
}
7.编译并运行RMIClient
javac RMIClient
java RMIClient a
java RMIClient d
(1)定义一个远程接口的接口,该接口的每一个方法必须声明它将产生一个RemoteException异常
(2)定义一个实现该接口的类
(3)使用RMIC程序生成远程实现所需的残根和框架
(4)创建安全策略
(5)使用rmiregistry注册表注册该远程对象并启动服务器对象
(6)创建一个客户程序和服务器进行RMI调用
1. 定义远程接口
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RemoteInterface extends Remote {
public String find(String msg) throws RemoteException;
}
2. 实现远程接口的类
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Vector;
public class RMIServer extends UnicastRemoteObject implements
RemoteInterface {
Vector<String> data = new Vector<String>();
/**
* @param args
*/
public RMIServer() throws RemoteException {
super();
initialize();
try {
if(System.getSecurityManager()==null){
System.setSecurityManager(new RMISecurityManager());
}
System.out.println("Set security manager.");
Naming.bind("//localhost/RMIServer", this);
System.out.println("RMITServer bound in registry.");
}
catch (Exception e){
e.printStackTrace();
}
}
public void initialize() {
data.add("a");
data.add("b");
data.add("c");
}
public String find(String msg) throws RemoteException {
String result = "Not found.";
for (int i = 0; i < data.size(); i++) {
String person = data.elementAt(i);
if(person.equals(msg)){
result = "Found";
}
}
return result;
}
public static void main(String[] args) {
try {
new RMIServer();
}
catch (Exception e){
System.out.println("main()");
e.printStackTrace();
}
}
}
3.运行rmic编译器
javac RMIServer.java
rmic RMIServer
4. 创建安全策略
在DOS窗口输入命令policytool并回车。单击【添加规则项目】->【添加权限】,在出现的窗口中的第一个下拉框选择【All permissions】,单击【确认】->【完成】
从File菜单中选择Save as,输入.java.policy,保存在登陆用户名的文件夹下。
5. 启动RMI注册表
rmiregistry
默认端口是1099,如果要使用新端口,可以rmiregistry <port> 。运行结果为:
Set Security Manager Success
RMIServer object bound in registry success
6. RMI客户端程序
import java.rmi.Naming;
public class RMIClient {
public String question = "";
/**
* @param args
*/
public RMIClient(String quest) {
question = quest;
try {
RemoteInterface remoteObject = (RemoteInterface) Naming
.lookup("//localhost/RMIServerClass");
System.out.println("remote object found. it is "
+ remoteObject.toString());
String reply = remoteObject.find(question);
System.out.println("remote object return result is: " + reply);
} catch (Exception e) {
}
}
public static void main(String[] args) {
if (args.length == 1) {
new RMIClient(args[0]);
} else {
System.out.println("please input on param.");
}
}
}
7.编译并运行RMIClient
javac RMIClient
java RMIClient a
java RMIClient d