(1)IDL定義
module ODsample{ interface intf{ long add( in long a, in long b ); }; };
(2)ネーミングサービスの登録
動的登録
(3)アプリケーション構成概要図
(4)クライアントアプリケーション
import java.io.*; import org.omg.CORBA.*; import org.omg.CosNaming.*; import ODsample.*; public class Client { public static void main( String args[] ) { try { // ORBの生成と初期化 ORB Orb = ORB.init( args, null ); // ネーミングサービスのオブジェクトリファレンスの取得 org.omg.CORBA.Object _tmpObj = Orb.resolve_initial_references( "NameService" ); NamingContextExt Cos = NamingContextExtHelper.narrow( _tmpObj ); // ネーミングサービスのresolveメソッドを発行し、 // サーバアプリケーションのオブジェクトリファレンスの獲得 String NCid = new String( "ODsample::POAsample1" ); // オブジェクト名 String NCkind = new String( "" ); // オブジェクトタイプ NameComponent nc = new NameComponent( NCid, NCkind ); NameComponent NCo[] = { nc }; org.omg.CORBA.Object Obj = Cos.resolve( NCo ); // サーバアプリケーションのオブジェクトリファレンス獲得 intf target = intfHelper.narrow( Obj ); int in1 = 0; // inパラメタ用変数 int in2 = 0; // inパラメタ用変数 int result; // 復帰値用変数 String line = null; try { System.out.print( "in1 => " ); line = new BufferedReader( new InputStreamReader( System.in ) ).readLine(); in1 = Integer.parseInt( line ); System.out.print( "in2 => " ); line = new BufferedReader( new InputStreamReader( System.in ) ).readLine(); in2 = Integer.parseInt( line ); } catch ( java.lang.NumberFormatException e ) { System.exit( 255 ); } // サーバアプリケーションのメソッド呼出し result = target.add( in1, in2 ); // メソッドの結果表示 System.out.println( in1 + " + " + in2 + " = "+ result ); } catch( org.omg.CORBA.SystemException se ) { System.out.println( "ERROR : " + se.getClass().getName() + " : minor = 0x" + java.lang.Integer.toHexString(se.minor) ); System.exit( 255 ); } catch( org.omg.CORBA.UserException ue ) { System.out.println( "ERROR : " + ue.getClass().getName() ); System.exit( 255 ); } catch ( Exception e ) { System.err.println( "ERROR : " + e ); System.exit( 255 ); } } }
(5)サーバアプリケーション
import org.omg.CORBA.*; import org.omg.PortableServer.*; import org.omg.CosNaming.*; import ODsample.*; // ユーザアプリケーション:メイン処理クラス public class Server { public static void main( String args[] ) { try { // ORBの生成と初期化 ORB Orb = ORB.init( args, null ); // RootPOAのオブジェクトリファレンスの取得 org.omg.CORBA.Object _tmpObj = Orb.resolve_initial_references( "RootPOA" ); // RootPOAのPOAオブジェクト獲得 POA rootPOA = POAHelper.narrow( _tmpObj ); // インタフェース用のPOA作成 // ポリシリスト作成 org.omg.CORBA.Policy policies[] = new org.omg.CORBA.Policy[4]; policies[0] = rootPOA.create_servant_retention_policy( ServantRetentionPolicyValue.NON_RETAIN ); policies[1] = rootPOA.create_request_processing_policy( RequestProcessingPolicyValue.USE_DEFAULT_SERVANT ); policies[2] = rootPOA.create_id_assignment_policy( IdAssignmentPolicyValue.SYSTEM_ID ); policies[3] = rootPOA.create_id_uniqueness_policy( IdUniquenessPolicyValue.MULTIPLE_ID ); // Default Servant用のPOAオブジェクトの作成 POA childPOA = rootPOA.create_POA( "childPOA", null, policies ); // Servantの生成 Servant svt = new UserServant(); // Default Servantに設定 childPOA.set_servant( svt ); org.omg.CORBA.Object _bindObj = childPOA.create_reference( "IDL:ODsample/intf:1.0" ); // ネーミングサービスのオブジェクトリファレンスの取得 _tmpObj = Orb.resolve_initial_references( "NameService" ); NamingContextExt Cos = NamingContextExtHelper.narrow( _tmpObj ); // ネーミングサービスのresolveメソッドを発行し、サーバアプリケーション // のオブジェクトリファレンスの獲得 String NCid = new String( "ODsample::POAsample1" ); // オブジェクト名 String NCkind = new String( "" ); // オブジェクトタイプ NameComponent nc = new NameComponent( NCid, NCkind ); NameComponent NCo[] = { nc }; try { Cos.unbind( NCo ); } catch( Exception e ) { ; } Cos.bind( NCo, _bindObj ); // POAマネージャの獲得 POAManager poamanager = childPOA.the_POAManager(); // POAマネージャのactivate poamanager.activate(); Orb.run(); } catch( org.omg.CORBA.SystemException se ) { System.out.println( "ERROR : " + se.getClass().getName() + " : minor = 0x" + java.lang.Integer.toHexString(se.minor) ); System.exit( 255 ); } catch( org.omg.CORBA.UserException ue ) { System.out.println( "ERROR : " + ue.getClass().getName() ); System.exit( 255 ); } catch ( Exception e ) { System.err.println( "ERROR : " + e ); System.exit( 255 ); } } } // Servant:メソッド実装クラス(スケルトンを継承) class UserServant extends intfPOA { public int add( int a, int b ) { return( a + b ); } }
(6)例外情報の獲得
サーバアプリケーションで例外を獲得する方法は、クライアントアプリケーションの例外処理と同様です。詳細については、“5.10 クライアントアプリケーションの例外処理”を参照してください。