Java RMI的簡單例子

          Posted on 2007-05-26 09:41 E.ven 閱讀(28186) 評論(6)  編輯  收藏
           

          現在雖然我們很少用到RMI進行編程,但是做為Java一個最早的分布式解決方案,我們還是有了解的必要,從例子開始吧(雖然是幾年前的了)!

          遠程接口RmiHelloRemoteIntfc .java

          import java.rmi.*;

          public interface RmiHelloRemoteIntfc extends Remote
          {
             String helloRemoteObj(String client) throws RemoteException;
          }

          遠程接口的實現類RmiHelloRemoteObj.java

          import java.rmi.server.*;
          import java.rmi.*;

          public class RmiHelloRemoteObj extends UnicastRemoteObject implements RmiHelloRemoteIntfc
          {

            public RmiHelloRemoteObj() throws RemoteException
            {
              super();
            }

            public String helloRemoteObj(String client) throws RemoteException
            {
               return "Hello World"+client;
            }

          }

          服務器類RmiHelloServer.java

          import java.io.*;
          import java.rmi.*;
          import java.rmi.server.*;
          import sun.applet.*;
          import java.rmi.registry.LocateRegistry;

          public class RmiHelloServer
          {

            public RmiHelloServer()
            {
            }
            public static void main(String[] args)
            {
              //創建并安裝安全管理器
              if(System.getSecurityManager()==null)
              {
                 System.setSecurityManager(new RMISecurityManager());
              }

              try{
                   //創建遠程對象
                   RmiHelloRemoteObj ttt=new RmiHelloRemoteObj();
                   //啟動注冊表
                   LocateRegistry.createRegistry(2222);
                   //獎名稱綁定到對象
                   Naming.rebind("http://Fangm:2222/helloObj",ttt);

                   System.out.println("RMI服務器正在運行。。。。。。");
                }
                catch(Exception e)
                {
                   e.printStackTrace();
                }


            }
          }

          服務器端的權限文件RmiHelloServer.policy

          grant codeBase
          "file:/e:/download/rmitest/"
          {
           permission java.net.SocketPermission
                "*:1000-9999","accept,connect,listen,resolve";
          };

           

          現在就看看Client端是如何連接服務器和進行遠程方法的調用的吧

          import java.rmi.*;
          import java.rmi.server.*;

          public class RmiHelloClient
          {

            public RmiHelloClient()
            {
            }
            public static void main(String[] args)
            {
              //創建并安裝安全管理器
              if(System.getSecurityManager()==null)
              {
                 System.setSecurityManager(new RMISecurityManager());
              }

              try{
                    RmiHelloRemoteIntfc c1=(RmiHelloRemoteIntfc)Naming.lookup("rmi://Fangm:2222/helloObj");
                    System.out.println(c1.helloRemoteObj("Everyone"));
              }
              catch(Exception e)
              {
                 e.printStackTrace();
              }
              System.exit(0);

           

            }
          }

          Client端的權限文件RmiHelloClient.policy

          grant codeBase
          "file:/e:/download/rmitest/"
          {
            permission java.net.SocketPermission
                "*:1000-9999","accept,connect,listen,resolve";
          };

          好了,一個最簡單的RMI例子就安無了,對了還少了最重要的一步,那就是編譯和運行呢?我們就來了個Bat或Cmd的批處理來進行吧,

          看看RmiHello.bat吧

          javac RmiHelloRemoteIntfc.java

          javac RmiHelloRemoteObj.java

          rmic RmiHelloRemoteObj

          javac RmiHelloServer.java

          javac RmiHelloClient.java

          echo 在另一個窗口啟動服務器,請稍后。。。
          start java  -Djava.security.policy=RmiHelloServer.policy RmiHelloServer

          echo 運行客戶程序。。。
          java -Djava.security.policy=RmiHelloClient.policy RmiHelloClient

          這個文件很簡單吧!包你一試就通,雖然簡單,不過對于初學者來說,還是很不錯的哦!

          Feedback

          # re: Java RMI的簡單例子  回復  更多評論   

          2008-06-12 08:18 by
          那現在用什么啊

          # re: Java RMI的簡單例子  回復  更多評論   

          2008-07-31 15:40 by 嘉寶
          是啊
          那現在用什么技術實現分布式

          # re: Java RMI的簡單例子[未登錄]  回復  更多評論   

          2008-09-12 14:46 by apple0668
          rmi結合spring提供接口,用起來更加方便了

          # re: Java RMI的簡單例子  回復  更多評論   

          2009-06-22 13:28 by 真暈啊
          #&%(*&!@(#^!@(*#(!@#
          給一個錯誤的例子來誤導我!
          注冊表的端口號跟主機端口號對不上的,主機地址又不知道是什么東東來的

          # re: Java RMI的簡單例子[未登錄]  回復  更多評論   

          2010-01-13 15:36 by haha
          @真暈啊
          不是別人誤導你 而是你自己學而不精阿。艾

          # re: Java RMI的簡單例子  回復  更多評論   

          2012-08-23 19:27 by 李鋒

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 27, comments - 15, trackbacks - 0, articles - 1

          Copyright © E.ven

          主站蜘蛛池模板: 酉阳| 贡嘎县| 吴旗县| 察雅县| 阿拉善右旗| 阿瓦提县| 郑州市| 常德市| 萨迦县| 略阳县| 香格里拉县| 双流县| 镇巴县| 汝州市| 娄烦县| 若羌县| 祥云县| 宁海县| 邢台县| 耒阳市| 邯郸市| 潜山县| 石柱| 昆山市| 蓬安县| 顺义区| 本溪市| 商城县| 贞丰县| 灵武市| 得荣县| 盐山县| 兴安盟| 金华市| 桓台县| 抚松县| 宜兰市| 安塞县| 长葛市| 和龙市| 五常市|