4.6.1.1. Currentインタフェース

Currentインタフェースは、トランザクションの開始やトランザクションのコミット、ロールバックなどのトランザクションサービス機能を提供する疑似オブジェクトインタフェースです。

CosTransactions::Currentクラスには次のメソッドがあります。

begin トランザクションを開始する
commit トランザクションをコミットする
rollback トランザクションをロールバックする
rollback_only トランザクションをロールバックに決定する
get_status トランザクションの状態を取得する
get_transation_name トランザクション名を取得する
set_timeout タイムアウト時間を設定する
get_timeout タイムアウト時間を取得する
get_control CosTransactions::Controlオブジェクトを取得する
suspend スレッドからトランザクションを切り離す
resume スレッドにトランザクションを割り当てる

   
4.6.1.1.1. begin

名称 begin - トランザクションを開始する
形式
 #include "CosTransactions.h"
void CosTransactions::Current::begin( CORBA::Environment& env = Ob_default_environment() );
説明 新規のトランザクションをスレッド上に生成することにより、トランザクションを開始します。
スレッド上で既にトランザクションが開始されている場合はそのトランザクションのサブトランザクションを生成します。トランザクションが開始されていない場合はトップレベルトランザクションを生成します。

WebOTX Transaction Serviceについては、リカバリサーバではサブトランザクションをサポートしています。そのため、リカバリサーバを利用してトランザクションの制御を行う場合は、CosTransactions::SubtransactionsUnavailable例外はthrowしません。それに対してRCSはサブトランザクションをサポートしていませんので、サブトランザクションを生成しようとした場合はこの例外をthrowします。
戻り値 ありません。
エラー CORBA標準例外がthrowされます。
関連項目

   
4.6.1.1.2. commit

名称 commit - トランザクションをコミットする
形式
 #include "CosTransactions.h"
void CosTransactions::current::commit ( CORBA_Boolean report_heuristics, CORBA::Environment& env = Ob_default_environment() );
説明 スレッドに関連するトランザクションのコミット処理を行います。
コミット処理の結果がロールバックした場合はCORBA標準例外であるCORBA::TRANSACTION_ROLLEDBACKをthrowします。
スレッドに関連するトランザクションがサブトランザクションの場合サブトランザクションのコミット処理を実施します。
チェックドトランザクションの場合リプライチェックが行われ、サーバメソッドの呼び出しがすべて完了していない場合コミットは失敗してロールバックが実施されます。
トランザクションのサブトランザクションが生成されており、かつそれらがコミットあるいはロールバックを実施していない場合サブトランザクションはロールバックされます。

トランザクションのコミット処理はトランザクションの生成者のみが実行することができます。

report_heuristicsには、ヒューリスティック状態になった場合の例外通知を行うかどうかを指定します。
CORBA_TRUEを指定した場合、コミットの処理が完了するまでこのメソッドは終了しません。この場合、トランザクションがヒューリスティックになると例外を通知します。
CORBA_FALSEを指定した場合、このメソッドは即座に応答を返します。しかし、ヒューリスティック状態である場合は例外を通知しません。

コミット処理の成功、失敗に関わらずそのスレッドからそのトランザクションは切り離されます。トップレベルトランザクションの場合はトランザクションとの関連を失い、サブトランザクションの場合は親のトランザクションに関連付けられます。切り離されたトランザクションはトランザクション完了後に消滅します。
戻り値 ありません。
エラー CORBA標準例外または次の例外がthrowされます。

CosTransactions::NoTransaction トランザクションが開始されていない、または既に完了しています。
CosTransactions::HeuristicMixed コミットの結果、コミットとロールバックが混在しています。
CosTransactions::HeuristicHazard コミットの結果、状態が不明になりました。
関連項目

   
4.6.1.1.3. rollback

名称 rollback - トランザクションをロールバックする
形式
 #include "CosTransactions.h"
void CosTransactions::current::rollback ( CORBA::Environment& env = Ob_default_environment() );
説明 スレッドに関連するトランザクションのロールバック処理を開始します。
スレッドに関連するトランザクションがサブトランザクションの場合はサブトランザクションのロールバック処理を開始します。ロールバック処理の成功、失敗に関わらずそのスレッドからそのトランザクションは切り離されます。トップレベルの場合はトランザクションとの関連を失い、サブトランザクションの場合は親のトランザクションに関連付けられます。切り離されたトランザクションはトランザクション完了後に消滅します。
戻り値 ありません。
エラー CORBA標準例外または次の例外がthrowされます。
CosTransactions::NoTransaction トランザクションが開始されていない、または既に完了しています。
関連項目

   
4.6.1.1.4. rollback_only

名称 rollback_only - トランザクションをロールバックに決定する
形式
 #include "CosTransactions.h"
void CosTransactions::current::rollback_only ( CORBA::Environment& env = Ob_default_environment() );
説明 スレッドに関連するトランザクションに対してロールバックオンリーをマーク付けします。
この処理を行うことによりrollbackと異なりトップレベルトランザクションがcommitまたはrollbackを要求したタイミングでロールバックされます。

このメソッドを呼び出す際に使用している Coordinatorオブジェクトに関連付けられたトランザクションに対してロールバックオンリーをマーク付けします。これによって、このトランザクションがコミットされることはなくなり、最終的にはロールバックしかされなくなります。このトランザクションがコミット、あるいはロールバック処理を開始してしまった後にこの処理を実行すると失敗します。
戻り値 ありません。
エラー CORBA標準例外または次の例外がthrowされます。

CosTransactions::NoTransaction トランザクションが開始されていない、または既に完了しています。
関連項目

   
4.6.1.1.5. get_status

名称 get_status - トランザクションの状態を取得する
形式
 #include "CosTransactions.h"
CosTransactions::Status CosTransactions::current::get_status ( CORBA::Environment& env = Ob_default_environment() );
説明 スレッドに関連付けられているトランザクションの状態を返却します。スレッドにトランザクションが関連付けられていない場合はStatusNoTransactionとなります。コミットまたはロールバック実行後、スレッドはトランザクションとの関連を失うためget_statusでは正しい状態を取得できません。トランザクションの完了を取得する場合は Synchronizationインタフェースを使用する必要があります。
戻り値 トランザクションの状態を返します。
エラー CORBA標準例外がthrowされます。

関連項目

   
4.6.1.1.6. get_transaction_name

名称 get_transaction_name - トランザクション名を取得する
形式
 #include "CosTransactions.h"
char* CosTransactions::current::get_transaction_name ( CORBA::Environment& env = Ob_default_environment() );
説明 トランザクションを一意に識別するための文字列を取得します。
戻り値 スレッドに関連付けられているトランザクションを識別する表記可能な名前を返します。
スレッドにトランザクションが関連付けられていない場合、nullを返却します。
エラー CORBA標準例外がthrowされます。
関連項目

   
4.6.1.1.7. set_timeout

名称 set_timeout - タイムアウト時間を設定する
形式
 #include "CosTransactions.h"
void CosTransactions::current::set_timeout ( CORBA_ULong time_out, CORBA::Environment& env = Ob_default_environment() );
説明 time_outにはトランザクションのタイムアウト時間を設定します。トランザクションが開始されて time_out秒経過しても完了していない場合、自動的にロールバックします。ただし、既にコミット処理を実施している場合はロールバックしません。time_outに0を指定した場合はタイムアウトになりません。タイムアウト時間は以後のbeginから有効になります。クライアント、サーバアプリケーションともプロセス単位に設定されます。
戻り値 ありません。
エラー CORBA標準例外がthrowされます。
関連項目

   
4.6.1.1.8. get_timeout

名称 get_timeout - タイムアウト時間を取得する
形式
 #include "CosTransactions.h"
CORBA::ULong CosTransactions::current::get_timeout ( CORBA::Environment& env = Ob_default_environment() );
説明 set_timeoutで設定したタイムアウト時間を取得します。クライアント、サーバアプリケーションともプロセス単位に設定されます。
戻り値 タイムアウト時間を返します。
エラー CORBA標準例外がthrowされます。
関連項目

   
4.6.1.1.9. get_control

名称 get_control - Controlオブジェクトを取得する
形式
 #include "CosTransactions.h"
CosTransactions::Control_ptr CosTransactions::current::get_control ( CORBA::Environment& env = Ob_default_environment() );
説明 スレッドに関連しているトランザクションのControlオブジェクトを入手します。 入手したControlインタフェース を使用することで明示的なトランザクション処理を行うことができます。
戻り値 Conrtolオブジェクトのオブジェクトリファレンスを返します。
トランザクションが実行されていない場合、nilオブジェクトを返します。
エラー CORBA標準例外がthrowされます。
関連項目

   
4.6.1.1.10. suspend

名称 suspend - スレッドからトランザクションを切り離す
形式
 #include "CosTransactions.h"
CosTransactions::Control_ptr CosTransactions::current::suspend ( CORBA::Environment& env = Ob_default_environment() );
説明 スレッドに関連しているトランザクションを一時的にスレッドから切り離します。
トランザクションが開始されていないスレッド、既に完了したスレッドやsuspendされたスレッド上の場合、nilオブジェクトを返します。
戻り値 スレッドに関連するトランザクションのControlオブジェクトのオブジェクトリファレンスを返します。
エラー CORBA標準例外がthrowされます。
関連項目

   
4.6.1.1.11. resume

名称 resume - スレッドにトランザクションを割り当てる
形式
 #include "CosTransactions.h"
void CosTransactions::current::resume ( CosTransactions::Control which, CORBA::Environment& env = Ob_default_environment() );
説明 スレッドにwhichで指定したControlのトランザクションを関連付けます。 nullが指定されるとそのスレッドはトランザクションとの関連を失います。チェックドトランザクションの場合、現在処理中のトランザクションのリプライチェックと新規に割り当てるトランザクションのレジームチェックを行います。
WebOTX Transaction Serviceの実装ではプロセス内でbeginしたトランザクション以外のトランザクションをresumeすることはできません。
戻り値 ありません。
エラー CORBA標準例外または次の例外がthrowされます。

CosTransactions::InvalidControl whichに不正なオブジェクトリファレンスが指定されました。
tx_resume whichに不正なオブジェクトリファレンスが指定されました。
関連項目