5.4.4 ステップ4: CORBAサーバー・アプリケーションの記述
CORBAサーバー・アプリケーションでトランザクションを使用する場合は、インタフェースの操作を実装するメソッドを記述する必要があります。Transactionsサンプル・アプリケーションでは、register_for_courses()操作のメソッド実装を記述します。
Oracle Tuxedo CORBAアプリケーションでデータベースを使用する場合は、XAリソース・マネージャをオープンおよびクローズするコードがCORBAサーバー・アプリケーションで必要となります。それらの操作は、ServerオブジェクトのServer::initialize()操作とServer::release()操作に含められます。
次のコード・スニペットに、XAリソース・マネージャをオープンおよびクローズするTransactionsサンプル・アプリケーションのServerオブジェクトのコードの部分を示します。
ノート:
トランザクションを実装するC++サーバー・アプリケーションの完全な例については、Oracle Tuxedoオンライン・ドキュメントの『CORBAトランザクションの使用』のTransactionサンプル・アプリケーションを参照してください。CORBA::Boolean Server::initialize(int argc, char* argv[]) {
TRACE_METHOD("Server::initialize");
try {
open_database();
begin_transactional();
register_fact();
return CORBA_TRUE;
}
catch (CORBA::Exception& e) {
LOG("CORBA exception : "<<e);
}
catch (SamplesDBException& e) {
LOG("Can’t connect to database");
}
catch (...) {
LOG("Unexpected exception");
}
cleanup();
return CORBA_FALSE;
}
void Server::release() {
TRACE_METHOD("Server::release");
cleanup();
}
static void cleanup() {
unregister_factory();
end_transactional();
close_database();
}
// Utilities to manage transaction resource manager
CORBA::Boolean s_became_transactional=CORBA_FALSE;
static void begin_transactional() {
TP: :open_xa_rm();
s_became_transactional=CORBA_TRUE;
}
static void end_transactional() {
if( !s_became_transactional) {
// cleanup not necessary
return;
}
try {
TP: :close_xa_rm ();
}
catch (CORBA::Exception& e) {
LOG("CORBA Exception : "<< e);
}
catch (...) {
LOG("unexpected exception");
}
s_became_transactional=CORBA_FALSE;
}親トピック: 開発ステップ