静的起動インタフェースでサーバアプリケーションを呼び出す場合の例について説明します。
■初期化
初期化処理として、ORBのオブジェクトリファレンスを取得します。オブジェクトリファレンスを取得するには、初期化メソッドを呼び出します。
記述例を以下に示します。
public class Sample { // クラスの宣言 public static void main( String args[] ) { org.omg.CORBA.ORB Orb; // ORBオブジェクト try { // ORBの生成と初期化 Orb = org.omg.CORBA.ORB.init( args, null ); ... } catch( java.lang.Exception e ) { ... // 例外処理 } } }
public class Sample extends java.applet.Applet { // appletクラスの宣言 public void init() { ... // 画面表示処理 } public void start() { org.omg.CORBA.ORB Orb; // ORB用オブジェクト try { // ORBの生成と初期化 Orb = org.omg.CORBA.ORB.init( this, null ); ... } catch( java.lang.Exception e ) { ... // 例外処理 } }
■ネーミングサービスのオブジェクトリファレンスの獲得
実行するオブジェクトをネーミングサービスから検索するために、ネーミングサービスのオブジェクトリファレンスを取得します。ネーミングサービスのオブジェクトリファレンスには、CORBAインタフェースのオブジェクトリファレンスの取り出しメソッドを使用します。
処理の記述例を以下に示します。
// NamingService用オブジェクトリファレンス org.omg.CosNaming.NamingContextExt Cos; // ネーミングサービスのオブジェクトリファレンスの取得 try { org.omg.CORBA.Object _tmpObj = Orb.resolve_initial_references( "NameService" ); Cos = org.omg.CosNaming.NamingContextExtHelper.narrow( _tmpObj ); ... } catch( java.lang.Exception e ) { ... // 例外処理 }
■サーバアプリケーションのオブジェクトリファレンスの獲得
ネーミングサービスのメソッドCosNaming.NamingContext.resolve()により、これから実行したいサーバアプリケーションのオブジェクトリファレンスを取り出します。検索したいオブジェクト名を当メソッドのパラメタとして指定します。
処理の記述例を以下に示します。
// ネーミングサービスのresolveメソッドを発行して // サーバアプリケーションのオブジェクトリファレンスの獲得 String NCid = new String( "ODdemo::calculator" ); // オブジェクト名 String NCkind = new String( "" ); // オブジェクトタイプ try { org.omg.CosNaming.NameComponent nc = new NameComponent( NCid, NCkind ); org.omg.CosNaming.NameComponent NCo[] = { nc }; // NamingServiceのresolveメソッド発行 org.omg.CORBA.Object Obj = Cos.resolve( NCo ); ... } catch( java.lang.Exception e ) { ... // 例外処理 }
トランザクションを開始するために、Currentインタフェースのオブジェクトリファレンスを取得し、CosTransactions.Current.beginメソッドを呼び出します。
処理の記述例を以下に示します。
static org.omg.CosTransactions.Current current; // トランザクション開始オブジェクトリファレンス // トランザクション開始インタフェースのオブジェクトリファレンスを獲得 org.omg.CORBA.Object _tmpObj1 = Orb.resolve_initial_references("TransactionCurrent"); current = org.omg.CosTransactions.CurrentHelper.narrow(_tmpObj1); // トランザクション開始メソッドの呼出し current.begin();
サーバプログラムのメソッドを呼び出します。メソッド名はIDLで指定したモジュール名、インタフェース名およびオペレーション名をドット(.)でつなげた形式で指定します。この例では、ODdemo、calculator、calculateがそれにあたります。なお、メソッド呼出し時にネーミングサービスで求めたサーバアプリケーションのオブジェクトリファレンスとサーバプログラムで例外が発生した場合に例外情報を設定するためにtry-catchブロックを指定します。
処理の記述例を以下に示します。
ODdemo.calculator target; // アプリケーション用オブジェクトリファレンス try { // ODdemo.calculatorクラスへの変換 target = ODdemo.calculatorHelper.narrow(Obj); ODdemo.calculatorPackage.result res = new ODdemo.calculatorPackage.result(); res = target.calculate( a, b ); ... } catch( NumberFormatException e ){ ... // 例外処理 } catch( ODdemo.calculatorPackage.ZEROPARAM e ){ ... // 例外処理 } catch( org.omg.CORBA.SystemException err ){ ... // 例外処理 }
サーバアプリケーションのメソッド呼出しの結果を復帰状態から判断し、トランザクションの状態を決定します。トランザクションを正常終了する場合は、CosTransactions.Current.commitメソッドを呼び出し、トランザクションをコミットします。トランザクションを異常終了する場合は、CosTransactions.Current.rollbackメソッドを呼び出し、トランザクションをロールバックします。
処理の記述例を以下に示します。
boolean rhuristic; ... rhuristic = true; try { current.commit( rhuristic ); }catch( NoTransaction e) { ... // 例外処理 } ... current.rollback( );