一个简单的RMI程序

来源:互联网 发布:淘宝店铺激活的流程 编辑:程序博客网 时间:2024/06/06 03:18


今天写了一个简单的RMI程序

一、开发工具 eclipse3.1
        JDK1.4

二、目录结构

 E:\SHIWEI\STUDY\RMI
│  .classpath
│  .project

├─bin
│  └─com
│      └─snoics
│          └─study
│              └─rmi
│                  └─information
│                          client.policy
│                          Information.class
│                          InformationClient.class
│                          InformationImpl.class
│                          InformationImpl_Stub.class
│                          InformationServer.class
│                          ShowBindingsName.class

└─src
    └─com
        └─snoics
            └─study
                └─rmi
                    └─information
                            client.policy
                            Information.java
                            InformationClient.java
                            InformationImpl.java
                            InformationServer.java
                            ShowBindingsName.java


首先创建一个接口:/*  * FileName Information.java * Create Time 2005-10-14 13:43:28 * Author shiwei * Descript  * Version  */package com.snoics.study.rmi.information;import java.rmi.Remote;import java.rmi.RemoteException;public interface Information extends Remote{ String getDescript() throws RemoteException;}接口的实现:/*  * FileName InformationImpl.java * Create Time 2005-10-14 13:44:59 * Author shiwei * Descript  * Version  */package com.snoics.study.rmi.information;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class InformationImpl extends UnicastRemoteObject implements Information{ private static final long serialVersionUID = -3493514659140991974L; private String descript="";  public InformationImpl(String descript) throws RemoteException{  this.descript=descript; }     public String getDescript() throws RemoteException{     return "show Descript: "+descript+"!";    }}服务端的代码:/*  * FileName InformationServer.java * Create Time 2005-10-14 13:48:36 * Author shiwei * Descript 服务端 * Version  */package com.snoics.study.rmi.information;import java.rmi.Naming;public class InformationServer { public InformationServer() {   }  /**  * 注册绑定服务  *  */ public void bindServer() {  try {   System.out.println("创建服务");   InformationImpl productImpl1=new InformationImpl("I'm a Person");   InformationImpl productImpl2=new InformationImpl("I'm a Work");   System.out.println("Binding Server to registry");   Naming.rebind("person",productImpl1);   Naming.rebind("work",productImpl2);  }catch(Exception e) {   e.printStackTrace() ;  } }  public static void main(String[] args) {  InformationServer informationServer=new InformationServer();  informationServer.bindServer();    ShowBindingsName showBindingsName=new ShowBindingsName();  showBindingsName.show(); }}再创建一个ShowBindingsName.java显示服务器注册的名称:/*  * FileName ShowBindingsName.java * Create Time 2005-10-14 13:53:50 * Author shiwei * Descript 显示Naming List * Version  */package com.snoics.study.rmi.information;import java.rmi.Naming;public class ShowBindingsName { /**  * 显示Naming List  *  */ public void show() {  try {   String[] bindings=Naming.list("");   int length=bindings.length;   for(int i=0;i    System.out.println(bindings[i]);   }  }catch(Exception e) {   e.printStackTrace() ;  } }}客户端的代码:/*  * FileName InformationClient.java * Create Time 2005-10-14 13:56:39 * Author shiwei * Descript 客户端 * Version  */package com.snoics.study.rmi.information;import java.rmi.Naming;import java.rmi.RMISecurityManager;public class InformationClient { /**  * 远程调用  *  */ public void showInformation() {  System.setProperty("java.security.policy", "E:/ShiWei/Study/RMI/bin/com/snoics/study/rmi/information/client.policy");  System.setSecurityManager(new RMISecurityManager());    String url="rmi://localhost/";  try {   Information information1=(Information)Naming.lookup(url+"person");   Information information2=(Information)Naming.lookup(url+"work");   System.out.println("information1.descript="+information1.getDescript());   System.out.println("information2.descript="+information2.getDescript());  }catch(Exception e) {   e.printStackTrace();  } }  public static void main(String[] args) {  InformationClient informationClient=new InformationClient();  informationClient.showInformation(); }}安全策略文件 client.policygrant{  permission java.net.SocketPermission     "*:1024-65535", "connect,accept";  permission java.net.SocketPermission     "*:80", "connect";};
三、部署程序:

代码写完就该开始动手部署了,RMI的部署也是一个非常让人头疼的问题。

只要一步步的跟着我下面的操作进行,一定可以把这个程序部署起来的。

首先假设编译好的class放到 E:\ShiWei\Study\RMI\bin 路径下面。

打开DOS窗口
1、设置classpath  输入:  C:\>set classpath=E:\ShiWei\Study\RMI\bin

2、创建存根 输入: C:\>rmic -v1.2 -d E:\ShiWei\Study\RMI\bin com.snoics.study.rmi.information.InformationImpl

3、启动RMI注册表 输入: C:\>start rmiregistry

4、启动服务端程序 输入: C:\>start java com.snoics.study.rmi.information.InformationServer

5、执行客户端程序 输入:  C:\>java com.snoics.study.rmi.information.InformationClient

6、如果以上的步骤全部执行成功,将在控制台上看到以下的信息:
information1.descript=show Descript: I'm a Person!
information2.descript=show Descript: I'm a Work!


四、注意:
    
       如果在执行过程中,客户端执行失败,请检查是否有打开防火墙,请把防火墙关闭以后重新执行客户端程序。

0 0
原创粉丝点击