<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    細(xì)心!用心!耐心!

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

    BlogJava 聯(lián)系 聚合 管理
      1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks

    RMI-IIOP入門

     

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


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

    實現(xiàn)遠(yuǎn)程接口,遠(yuǎn)程接口告訴JVM:實現(xiàn)了該接口的對象可以遠(yuǎn)程調(diào)用及有哪些方法可以調(diào)用。
    本例子中定義了sayHello()。由于遠(yuǎn)程調(diào)用會涉及到網(wǎng)絡(luò)通訊,因此這些方法都要拋出RemoteException.
    遠(yuǎn)程接口和遠(yuǎn)程對象可以由A開發(fā),并把遠(yuǎn)程接口(Hello)d打包分給Client端開發(fā)者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;
    }

    生成遠(yuǎn)程對象.
    // 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. 實現(xiàn)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 張金鵬 閱讀(352) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: yy一级毛片免费视频| jizz在线免费播放| 青青青国产在线观看免费网站| 亚洲一区二区在线免费观看| 久久国产乱子精品免费女| 亚洲AV无码一区东京热| 永久在线观看免费视频| 亚洲国产精品自在线一区二区 | 久久精品成人免费网站| 亚洲av最新在线网址| 无码国产精品一区二区免费式芒果 | 在线日本高清免费不卡| 亚洲高清日韩精品第一区| 亚洲精品免费网站| 亚洲人成色77777在线观看| 日本成人在线免费观看| 乱人伦中文视频在线观看免费| 亚洲午夜日韩高清一区| 精品亚洲永久免费精品| 亚洲自国产拍揄拍| 国产jizzjizz视频免费看| 国产特黄特色的大片观看免费视频| 亚洲成AV人片一区二区密柚| **aaaaa毛片免费| 亚洲人成无码网站在线观看| 免费一区二区视频| 久久爰www免费人成| 亚洲综合激情五月丁香六月| 亚洲无线一二三四区手机| 久久99热精品免费观看动漫 | 香港一级毛片免费看| 亚洲精品亚洲人成在线观看| 久久精品免费一区二区| 久久久久亚洲国产AV麻豆| 九月丁香婷婷亚洲综合色| 无码精品A∨在线观看免费| 特级一级毛片免费看| 亚洲色四在线视频观看| 浮力影院第一页小视频国产在线观看免费 | 久久国产乱子伦精品免费不卡| 亚洲性色AV日韩在线观看|