ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(データベース連携サービス編)
Interstage

4.9.1 ソースプログラムの作成(静的起動インタフェース)

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


■初期化

初期化処理として、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( );