細心!用心!耐心!

          吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業,五六點粗墨,七八筆買賣,九十道人情。

          BlogJava 聯系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks

          RMI-IIOP入門

           

          RMI-IIOP出現以前,只有RMI和CORBA兩種選擇來進行分布式程序設計。RMI-IIOP綜合了RMI
          和CORBA的優點,克服了他們的缺點,使得程序員能更方便的編寫分布式程序設計,實現分布式計算。
          首先,RMI-IIOP綜合了RMI的簡單性和CORBA的多語言性(兼容性),其次RMI-IIOP克服了RMI只能
          用于Java的缺點和CORBA的復雜性(可以不用掌握IDL).
          下面給出了一個非常的簡單的RMI-IIOP程序,該程序是在上一個例子(Java2 RMI入門的基礎)
          上修改完成的,可以對比兩個程序的區別。


          1. 實現遠程接口,生成遠程對象,存根(Stub)和框架(Skeleton)

          實現遠程接口,遠程接口告訴JVM:實現了該接口的對象可以遠程調用及有哪些方法可以調用。
          本例子中定義了sayHello()。由于遠程調用會涉及到網絡通訊,因此這些方法都要拋出RemoteException.
          遠程接口和遠程對象可以由A開發,并把遠程接口(Hello)d打包分給Client端開發者B。

          建立f:
          mi_iiop目錄,把Hello.java和HelloImpl.java拷貝到該目錄中。

          // Hello.java
          package jdeveloper.rmi;

          import java.rmi.Remote;
          import java.rmi.RemoteException;

          public interface Hello extends Remote {
          String sayHello() throws RemoteException;
          }

          生成遠程對象.
          // HelloImpl.java
          package jdeveloper.rmi_iiop;

          import javax.naming.*;

          import java.rmi.RemoteException;
          import java.rmi.RMISecurityManager;
          //import java.rmi.server.UnicastRemoteObject;
          import javax.rmi.PortableRemoteObject;

          public class HelloImpl extends PortableRemoteObject
          implements Hello {
          public HelloImpl() throws RemoteException {
          super();
          }

          public String sayHello() {
          return "Hello World!";
          }

          public static void main(String args[]) {

          // Create and install a security manager
          if (System.getSecurityManager() == null) {
          System.setSecurityManager(new RMISecurityManager());
          }
          try {
          Hello obj = new HelloImpl();
          // Bind this object instance to the name "HelloServer"
          //***** old code for rmi
          // Naming.rebind("HelloServer", obj);

          //***** new code for rmi-iiop
          Context initialNamingContext = new InitialContext();
          initialNamingContext.rebind("HelloServer", obj);

          System.out.println("HelloServer bound in registry");
          } catch (Exception e) {
          System.out.println("HelloImpl err: " + e.getMessage());
          e.printStackTrace();
          }
          }
          }

          存根(Stub)和框架(Skeleton)
          f:
          cd
          mi_iiop
          set classpath=.;%classpath%
          javac -d . Hello.java
          javac -d . HelloImpl.java
          rmic -iiop -d . jdeveloper.rmi_iiop.HelloImpl
          這一步將生成<_Interface>_stub.class,<_InterfaceImpl>_Tie.class:
          _Hello_Stub.class和_HelloImpl_Tie.class


          2. 實現Client端程序
          // HelloClient.java
          package jdeveloper.rmi_iiop;

          import java.rmi.RMISecurityManager;
          import java.rmi.Naming;
          import java.rmi.RemoteException;
          import java.rmi.NotBoundException;

          import javax.rmi.PortableRemoteObject;
          import javax.naming.*;

          public class HelloClient {
          public static void main(String args[]) throws Exception{
          System.setSecurityManager(new RMISecurityManager());
          Context initialNamingContext = new InitialContext();
          Hello RemoteObj = (Hello) PortableRemoteObject.narrow(
          initialNamingContext.lookup("iiop://"+ args[0] +"/HelloServer"),
          Hello.class
          );
          System.out.println(RemoteObj.sayHello());
          }
          }

          把HelloClient.java拷貝到目錄f:
          mi_iiop中。
          f:
          cd
          mi_iiop
          javac -d . HelloClient.java

          3. 運行程序
          啟動DOS窗口
          運行 tnameserv


          把 server.bat 和 policy 放到f:
          mi_iiop
          啟動新的DOS窗口
          運行 server


          啟動新的DOS窗口
          把 client.bat 放到f:
          mi_iiop
          運行 client hostname

          server.bat
          set CP=%classpath%
          set classpath=.;%classpath%
          java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
          -Djava.naming.provider.url=iiop://hjc:900 -Djava.security.policy=policy jdeveloper.rmi_iiop.HelloImpl
          set classpath=%CP%
          client.bat
          set CP=%classpath%
          set classpath=.;%classpath%
          java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
          -Djava.naming.provider.url=iiop://hjc:900 -Djava.security.policy=policy jdeveloper.rmi_iiop.HelloClient %1
          set classpath=%CP%
          policy
          grant {
          // Allow everything for now
          permission java.security.AllPermission;

          posted on 2007-05-06 12:33 張金鵬 閱讀(350) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 上林县| 拜城县| 丰县| 台中市| 吉安县| 枞阳县| 奇台县| 房山区| 东源县| 鹿邑县| 左云县| 达州市| 论坛| 封开县| 华池县| 无为县| 肇庆市| 鄂尔多斯市| 东明县| 赫章县| 华亭县| 太原市| 邳州市| 绍兴市| 无锡市| 宁津县| 福鼎市| 阳山县| 即墨市| 蕲春县| 安溪县| 大城县| 黄骅市| 白水县| 富源县| 漳州市| 和政县| 海安县| 临夏县| 富阳市| 中宁县|