隨筆-26  評論-111  文章-19  trackbacks-0

          今天寫了一個簡單的RMI程序

          一、開發(fā)工具 eclipse3.1
                  JDK1.4

          二、目錄結(jié)構(gòu)

           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

          ----------------------------------------------代碼--------------------------------------------------
          首先創(chuàng)建一個接口:
          /* 
           * 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;
          }



          接口的實現(xiàn):
          /* 
           * 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+"!";
              }

          }



          服務(wù)端的代碼:
          /* 
           * FileName InformationServer.java
           * Create Time 2005-10-14 13:48:36
           * Author shiwei
           * Descript 服務(wù)端
           * Version 
           
          */


          package com.snoics.study.rmi.information;

          import java.rmi.Naming;


          public class InformationServer {
           
          public InformationServer() {
            
           }

           
           
          /**
            * 注冊綁定服務(wù)
            *
            
          */

           
          public void bindServer() {
            
          try {
             System.out.println(
          "創(chuàng)建服務(wù)");
             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();
           }

          }


          再創(chuàng)建一個ShowBindingsName.java顯示服務(wù)器注冊的名稱:

          /* 
           * 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 {

           
          /**
            * 遠(yuǎn)程調(diào)用
            *
            
          */

           
          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";
          }
          ;


          ----------------------------------------------代碼結(jié)束--------------------------------------------------


          三、部署程序:

          代碼寫完就該開始動手部署了,RMI的部署也是一個非常讓人頭疼的問題。

          只要一步步的跟著我下面的操作進行,一定可以把這個程序部署起來的。

          首先假設(shè)編譯好的class放到 E:\ShiWei\Study\RMI\bin 路徑下面。

          打開DOS窗口
          1、設(shè)置classpath  輸入:  C:\>set classpath=E:\ShiWei\Study\RMI\bin

          2、創(chuàng)建存根 輸入: C:\>rmic -v1.2 -d E:\ShiWei\Study\RMI\bin com.snoics.study.rmi.information.InformationImpl

          3、啟動RMI注冊表 輸入: C:\>start rmiregistry

          4、啟動服務(wù)端程序 輸入: C:\>start java com.snoics.study.rmi.information.InformationServer

          5、執(zhí)行客戶端程序 輸入:  C:\>java com.snoics.study.rmi.information.InformationClient

          6、如果以上的步驟全部執(zhí)行成功,將在控制臺上看到以下的信息:
          information1.descript=show Descript: I'm a Person!
          information2.descript=show Descript: I'm a Work!


          四、注意:
             
                 如果在執(zhí)行過程中,客戶端執(zhí)行失敗,請檢查是否有打開防火墻,請把防火墻關(guān)閉以后重新執(zhí)行客戶端程序。



          posted on 2005-10-14 17:29 snoics 閱讀(1670) 評論(0)  編輯  收藏 所屬分類: 學(xué)習(xí) . 感悟
          主站蜘蛛池模板: 襄垣县| 长兴县| 广州市| 两当县| 安陆市| 和政县| 绥江县| 石渠县| 宁明县| 涟源市| 丹江口市| 黄浦区| 青岛市| 长岭县| 武乡县| 荔浦县| 莲花县| 玛多县| 龙山县| 海晏县| 招远市| 涞源县| 盐津县| 永吉县| 增城市| 略阳县| 改则县| 滦平县| 德兴市| 合江县| 西畴县| 雷山县| 澎湖县| 嘉义县| 千阳县| 东乡族自治县| 富川| 宜川县| 遂平县| 右玉县| 普兰县|