利用者が使用する初期化処理、およびユーザサービス処理部についての基本形を以下に示します。
■初期化処理部
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サービスへ通知します。
注意
アプリケーションの登録時、インプリメンテーション情報定義ファイルの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を発行してトランザクションを終了してください。