利用者が使用する初期化処理、およびユーザサービス処理部についての基本形を以下に示します。
■初期化処理部
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) }
CORBAサービスを初期化するために以下のメソッドを使用します。
CORBA::ORB_init()
CORBA::ORB::BOA_init()
サーバがデータベースをアクセスするための初期化を行います。
OTS::initオペレーションのパラメタには、サーバアプリケーションのインプリメンテーションIDを指定します。
OTS::initオペレーションは、データベースへのコネクションをオープンします。
リクエスト受信可能であることをCORBAサービスへ通知します。
注意
アプリケーションの登録時、CORBAアプリケーション情報定義ファイルのmodeに「SYNC_END」を指定する必要があります。「SYNC_END」を指定することにより、アプリケーションが非活性化された場合やアプリケーション停止時まで復帰しないようになります。
サーバがデータベースをアクセスするための終了処理を行います。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を発行してトランザクションを終了してください。