Interstage Application Server アプリケーション作成ガイド (コンポーネントトランザクションサービス編)
目次 索引 前ページ次ページ

第3章 クライアントアプリケーションの作成> 3.4 クライアントアプリケーションソースの作成(CurrentインタフェースのJava言語)> 3.4.2 ソースの作成

3.4.2.3 静的起動インタフェース

 静的起動インタフェースでサーバアプリケーションを呼び出す場合の、クライアントアプリケーションの記述例について説明します。

初期化

 初期化処理として、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.NamingContext  Cos; 
  
  // ネーミングサービスのオブジェクトリファレンスの取得
  try {
     org.omg.CORBA.Object _tmpObj =
                            Orb.resolve_initial_references( "NameService" ); 
     Cos  = org.omg.CosNaming.NamingContextHelper.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( );

目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2006