Interstage Application Server アプリケーション作成ガイド (データベース連携サービス編)
|
目次
索引
|
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.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( );
|
Copyright 2008 FUJITSU LIMITED