前段时间已经学了点RMI的知识,当时写了一个小例子,没出什么错误,所以今天在看RMI竟然没留下什么印象,下面写一下我对Java RMI学习的一点心得,以供以后查询,当然我们以一个小例子为基础:
1,我用的是eclipse3.1.1所以就下载了RMI的插件RMI Plug-in for Eclipse version 2.0,该网站上有个Demo,很不错适合入门。
2,新建一个java project ,新建一个 Remote Interface接口类printcommon,
public interface printcommon extends Remote {
public String print() throws RemoteException;
}
当然在 eclipse下会自动编译,如果在命令窗口内要用javac编译。
3 新建一个 java project ,新建一个类ServerImpl,作为服务器端,实现上面定义的接口。在构建路径的project选项要选上上面接口的project
public class serverImp extends UnicastRemoteObject implements printcommon {
protected serverImp() throws RemoteException {
super(); / /这个调用继承类的构造函数一定要写的,因为它用来建立客户端和服务器端的连接。
}
public static void main(String[] args) {
Registry r;
try {
r = LocateRegistry.getRegistry();
r.bind("print",new serverImp()); //这个要注意,左边的参数是个字符串,只是右边新建对象的别名,供客户程序查找远程对象用的,有的人把它当成一个地址了,在两台机子部署的时候,它也不代表地址,有人写了一个博客就是代表地址,误导了我调试了好久。
System.out.print("server is ready");
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public String print() throws RemoteException { //方法的实现
// TODO 自动生成方法存根
return "HelloWorld";
}
}
4 在eclipse下,点击该project的右键,在RMI选项中选择产生stub.class,具体步骤可以看demo.如在在命令行下,先编译后键入rmic ServerImpl。
5. 新建java project,新建一个类,作为客户端。当然也要加入接口的project,
public class client {
public static void main(String[] args) {
System.setSecurityManager(new RMISecurityManager());
try {
printcommon printer=(printcommon) Naming.lookup("rmi://202.193.86.31:1099/print");//查找在服务器端要调用的对象,格式是rmi://服务器地址/ 对象别名, 端口号可以省略,默认是1099。
System.out.println(printer.print());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
编译保存。
6,在服务器端 键入 >rmiregistry,在eclipse 下在插件下运行就行了。然后以RMI应用程序的形式运行服务器端的程序,在codebase里写入地址,如果在本地做试验的话,就点击compute from classpath,如果在两台机子上部署的话,这里要自己键入http://地址:8080/example/Hello.jar ,example是我在Tomcat服务器下一个Web项目名,Hello.jar是接口类printcommon和stub.class的打包,因为客户端访问的是stub.class,所以只需要把它们两打包就行了,可以在project下导出。客户端在查找远程对象时,就会在这个地址下寻找。当然你要开启tomcat。还要设置host地址。设置好后就运行服务器端了。如在命令行下,键入> java -Djava.security.policy=policy.txt ServerImp。
7,运行客户端,以RMI应用程序运行,在对话框内要产生安全文件。运行OK了。在命令行键入> java -Djava.security.policy=policy.txt CalculatorClient
改变端口号: java.rmi.registry.LocateRegistry.createRegistry(2005);