随笔-26  评论-111  文章-19  trackbacks-0

今天写了一个简单的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.policy

grant
{
  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!


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



posted on 2005-10-14 17:29 snoics 阅读(1652) 评论(0)  编辑  收藏 所属分类: 学习 . 感悟

只有注册用户登录后才能发表评论。


网站导航: