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

3.2.2 ソースプログラムの作成

利用者が使用する初期化処理、およびユーザサービス処理部についての基本形を以下に示します。


初期化処理部

static CORBA::ORB_ptr                orb;
static CORBA::BOA_ptr                boa;
static FJ::ImplementationRep_ptr     impl_rep;
static CORBA::ImplementationDef_ptr  impl;
static OTS_ptr                       OTSobj;
static CORBA::Object_ptr             obj;
static CORBA::Environment            env;

main(int argc, char *argv[])
   {
                   :

         /* CORBAサービスの初期化 */
         orb = CORBA::ORB_init(argc, argv, FJ_OM_ORBid, env);       …(1)
         boa = orb->BOA_init(argc, argv, CORBA_BOA_OAid, env);
         obj = orb->resolve_initial_references(CORBA_ORB_ObjectId_ImplementationRepository, env)
         impl_rep = FJ::ImplementationRep::narrow(obj);
         obj = impl_rep->lookup_id(_IMPL_mod_intf, env);
         impl = CORBA::ImplementationDef::_narrow(obj);

         /* サーバがデータベースをアクセスするための初期化 */
         obj = orb->resolve_initial_references(CORBA_ORB_ObjectId_TransactionServerInit, env);
         OTSobj = OTS::_narrow(obj);
         CORBA::release( obj );
         OTSobj->init(orb, _IMPL_mod_intf, env);                    …(2)

         /* リクエスト受信可能であることをCORBAサービスへ通知 */
         boa->impl_is_ready(impl, env);                             …(3)

         /* サーバがデータベースをアクセスするための終了処理 */
         OTSobj->term(env);                                         …(4)
   }

(1) CORBAサービスの初期化

CORBAサービスを初期化するために以下のメソッドを使用します。

  • CORBA::ORB_init()

  • CORBA::ORB::BOA_init()


(2) サーバがデータベースをアクセスするための初期化

サーバがデータベースをアクセスするための初期化を行います。
OTS::initオペレーションのパラメタには、サーバアプリケーションのインプリメンテーションIDを指定します。
OTS::initオペレーションは、データベースへのコネクションをオープンします。


(3) リクエストが受信可能であることをCORBAサービスへ通知

リクエスト受信可能であることをCORBAサービスへ通知します。

注意

アプリケーションの登録時、CORBAアプリケーション情報定義ファイルのmodeに「SYNC_END」を指定する必要があります。「SYNC_END」を指定することにより、アプリケーションが非活性化された場合やアプリケーション停止時まで復帰しないようになります。


(4) サーバがデータベースをアクセスするための終了処理

サーバがデータベースをアクセスするための終了処理を行います。OTS::termメソッドは、データベースへのコネクションをクローズします。


ユーザサービス処理部

ユーザサービス処理部には、データベースへの処理を記述します。また、このユーザサービス処理部のインタフェースは、ユーザがIDL定義を行う必要があります。
ユーザサービス処理部の記述例を以下に示します。

mod_intf_Impl::methodA(CORBA::long account1, CORBA::long account2, CORBA::Environment &env)
  {
      /* ユーザの操作 */
      SQL  データベースへのアクセス
          :
  }

また、IDLファイルの定義例を以下に示します。

module  mod {
       interface  intf {
            void  methodA(in long account1,
                          out long account2);
       };
};

注意

サーバアプリケーションが異常を検出した場合

サーバアプリケーションが以下のようなエラーを検出した場合、エラーをクライアントアプリケーションに通知する必要があります。

  • 自プログラムの異常を検出した場合

  • データベースシステムからエラーが通知された場合

  • システムから資源不足やメモリ不足などのエラーが通知された場合

エラーが通知されたクライアントアプリケーションでは、rollbackを発行してトランザクションを終了してください。