首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java RMI-IIOP 入門教學:融合 RMI 簡易性與 CORBA 跨語言能力

     編輯:Java 程式設計入門

RMI-IIOP 優勢

  • 保留 RMI 簡單語法(遠端介面定義、Stub/Skeleton 自動生成)。
  • 採用 IIOP 協議,支援跨語言互操作(無需手寫 IDL)。
  • 克服 RMI 僅限 Java、CORBA 過於複雜的缺點。

完整範例步驟

1. 遠端介面與實作

// Hello.java
package jdeveloper.rmi;
public interface Hello extends java.rmi.Remote {
    String sayHello() throws java.rmi.RemoteException;
}

// HelloImpl.java
package jdeveloper.rmi_iiop;
public class HelloImpl extends javax.rmi.PortableRemoteObject implements Hello {
    public HelloImpl() throws RemoteException { super(); }
    public String sayHello() { return "Hello World!"; }
    public static void main(String[] args) {
        if (System.getSecurityManager() == null)
            System.setSecurityManager(new RMISecurityManager());
        try {
            Hello obj = new HelloImpl();
            Context ctx = new InitialContext();
            ctx.rebind("HelloServer", obj); // JNDI 綁定
            System.out.println("HelloServer bound in registry");
        } catch (Exception e) { e.printStackTrace(); }
    }
}

2. 編譯與產生 Stub/Tie

javac -d . Hello.java
javac -d . HelloImpl.java
rmic -iiop -d . jdeveloper.rmi_iiop.HelloImpl
// 產生 _Hello_Stub.class, _HelloImpl_Tie.class

3. Client 端程式

Context ctx = new InitialContext();
Hello remote = (Hello) PortableRemoteObject.narrow(
    ctx.lookup("iiop://" + args[0] + "/HelloServer"), Hello.class);
System.out.println(remote.sayHello());

4. 執行環境啟動

  1. 啟動 tnameserv(CORBA 命名服務,預設埠 900)。
  2. Server 端:java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory -Djava.naming.provider.url=iiop://host:900 -Djava.security.policy=policy jdeveloper.rmi_iiop.HelloImpl
  3. Client 端:java -D... jdeveloper.rmi_iiop.HelloClient hostname

policy 檔授予 AllPermission。批次檔 server.bat/client.bat 簡化指令。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved