// Server.java import org.omg.PortableServer.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import java.io.*; public class Server { public static void main(String[] args) { try { // ORB の初期化 org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); // RootPOA のオブジェクトリファレンスを取得 org.omg.CORBA.Object obj = orb.resolve_initial_references("RootPOA"); POA rootPOA = POAHelper.narrow(obj); // サーバントの生成 AccountImpl accountServant = new AccountImpl("OGIS-RI",5000); // RootPOA 上でサーバントを活性化 rootPOA.activate_object(accountServant); // POA マネージャの活性化 rootPOA.the_POAManager().activate(); // サーバントからオブジェクトリファレンスを取得 org.omg.CORBA.Object reference = rootPOA.servant_to_reference(accountServant); // ネーミングサービスのルートコンテキストのリファレンスを取得 obj = orb.resolve_initial_references("NameService"); // ルートコンテキストのリファレンスを NamingContext 型に変換 NamingContext rootCtx = NamingContextHelper.narrow(obj); // 名前を作成する NameComponent[] nameCtx = { new NameComponent("Bank", "") }; NamingContext bankCtx; try{ // ネーミングコンテキストを取得する obj = rootCtx.resolve(nameCtx); bankCtx = NamingContextHelper.narrow(obj); }catch(NotFound e){ // ネーミングコンテキストが存在しない場合 // 作成した名前でネーミングコンテキストを登録 System.out.println("Exception: " + e); bankCtx = rootCtx.bind_new_context(nameCtx); } // 登録する名前を作成する NameComponent[] nameObj = { new NameComponent("OGIS-RI", "Account") }; try{ // 作成した名前で Account のオブジェクトリファレンスを登録 bankCtx.bind(nameObj,reference); }catch(AlreadyBound e){ // 既にオブジェクトリファレンスが登録されている場合 // 再度、作成した名前でオブジェクトリファレンスを登録 System.out.println("Exception: " + e); bankCtx.rebind(nameObj, reference); } // クライアントからのリクエストに待機 System.out.println("Server is ready."); orb.run(); } catch (Exception e) { e.printStackTrace(); } } }