全程客戶不知物件位置、實作細節、ORB 種類。ORB 間透過 IIOP (Internet Inter-ORB Protocol) 通訊。
idltojava 編譯器 + 類庫 ORB
// Greeting.idl
module GreetingApp {
interface Greeting {
string sayHello();
};
};
prompt> idltojava Greeting.idl
產生:Greeting.java (介面)、GreetingHelper.java、GreetingHolder.java、_GreetingImplBase.java (Skeleton 基底)、_GreetingStub.java (Client Stub)
// GreetingImpl.java
import GreetingApp.*;
import org.omg.CORBA.*;
public class GreetingImpl extends _GreetingImplBase {
public String sayHello() {
return "中國,早上好!";
}
}
// GreetingServer.java
import GreetingApp.*;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
public class GreetingServer {
public static void main(String[] args) {
try {
ORB orb = ORB.init(args, null);
GreetingImpl greetingRef = new GreetingImpl();
orb.connect(greetingRef);
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("Greeting", "");
NameComponent[] path = {nc};
ncRef.rebind(path, greetingRef);
System.out.println("Greeting Server ready...");
java.lang.Object sync = new java.lang.Object();
synchronized(sync) { sync.wait(); }
} catch (Exception e) { e.printStackTrace(); }
}
}
// GreetingClient.java
import GreetingApp.*;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
public class GreetingClient {
public static void main(String[] args) {
try {
ORB orb = ORB.init(args, null);
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("Greeting", "");
NameComponent[] path = {nc};
Greeting greetingRef = GreetingHelper.narrow(ncRef.resolve(path));
String message = greetingRef.sayHello();
System.out.println("Server response: " + message);
} catch (Exception e) { e.printStackTrace(); }
}
}
tnameserv (預設埠 900)java GreetingServerjava GreetingClientJava IDL 讓 Java 開發者以原生方式實作 CORBA 分散式應用,透過 IDL 定義介面、idltojava 產生骨架、命名服務發現物件,完整展示跨平台、跨語言的分散式物件互操作基礎流程。