第20章 パーティシパント
20.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
パーティシパントはアプリケーションに関わるビジネスサービスの代わりにトランザクション管理に付随する作業を実行するエンティティです。Web サービス (サンプルコードでは劇場予約システム) には、座席の予約や空席紹介用のビジネスロジックがいくつか含まれていますが、永続的に情報を保持するものからのサポートが必要です。通常、これはデータベースですが、ファイルシステム、NVRAMや他のストレージメカニズムの場合があります。
サービスはバックエンドのデータベースと直接対話をする可能性がありますが、トランザクションが最終的にコミットやロールバックを制御しているため、変更のコミットややり直しはできません。トランザクションがこの制御を実行するには、データベースとやりとりを行う必要があります。図20.1「トランザクション、パーティシパント、バックエンドトランザクションの制御」にあるようにXTS ではパーティシパントがこのようなやりとりを行います。
図20.1 トランザクション、パーティシパント、バックエンドトランザクションの制御
20.1.1. アトミックトランザクション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
アトミックトランザクションのパーティシパントは「Durable2PCParticipant」あるいは 「Volatile2PCParticipant」のインスタンスです。
20.1.1.1. Durable2PCParticipant リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Durable2PCParticipant は、
com.arjuna.wst11.Durable2Participant
に従い、Durable2PCParticipant 署名に掲載の署名でWS-ATomic Transaction Durable2PC プロトコルに対応しています。
Durable2PCParticipant 署名
prepare
- パーティシパントは、トランザクションの範囲内でWeb サービスが実行する作業をコミットあるいはロールバックできるように必要な作業を実行する必要があります。この実装は、パーティシパントとコーディネータ間の暗黙的なコントラクトを達成するために、必要な事項を自由に行うことができます。パーティシパントは、以下の3つの値の内いずれかを使い、
com.arjuna.wst11.Vote
のインスタンスを返すことでprepare
可能かを示します。ReadOnly
は、ステート情報を更新しなかったため、パーティシパントがトランザクションの結果について知る必要がないという意味です。Prepared
は、最終的なトランザクションの結果によりパーティシパントがコミットあるいはロールバックの準備ができていることを示しています。これを達成するために、十分な数のステートアップデートを永続化しています。Aborted
は、パーティシパントが中断され、トランザクションも中断を試行しているという意味です。
commit
- パーティシパントは、作業を永続化する必要があります。これを達成する方法は各実装により変わってきます。たとえば、劇場の例ではチケットの予約がコミットされます。コミット処理が完了しないと、パーティシパントは
SystemException
エラーをスローしトランザクションがヒューリスティックな結果に陥ってしまう可能性もあります。 rollback
- パーティシパントは作業をやり直す必要があります。ロールバック処理が完了できない場合はパーティシパントが
SystemException
エラーをスローしトランザクションがヒューリスティックな結果に陥ってしまう可能性もあります。 unknown
- このメソッドは廃止予定となっており今後XTS から削除される予定です。
error
- システムクラッシュから回復時まれに、以前に準備されたパーティシパントを完了あるいはロールバックできない場合があり、
error
操作を呼び出します。
20.1.1.2. Volatile2PCParticipant リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このパーティシパントは、
com.arjuna.wst11.Volatile2Participant
インターフェースに従い、Volatile2PCParticipant 署名に記載の署名でWS-ATomic Transaction Volatile2PC プロトコルに対応しています。
Volatile2PCParticipant 署名
prepare
- パーティシパントは、トランザクションの範囲内でWeb サービス作成の揮発性データをシステムストアへフラッシュするのに必要な作業を実行する必要があります。この実装は、パーティシパントとコーディネータ間の暗黙的なコントラクトを達成するために、必要な事項を自由に行うことができます。パーティシパントは、以下の3つの値の内いずれかを使い、
com.arjuna.wst11.Vote
のインスタンスを返すことでprepare
可能かを示します。ReadOnly
は、トランザクションの有効期間内でステートの情報に変更を加えられなかったため、パーティシパントはトランザクションの結果について知る必要がないと言う意味です。Prepared
は、パーティシパントは最終的なトランザクションの結果をcommit
かrollback
の呼出しで通知して欲しいという意味です。Aborted
は、パーティシパントが中断され、トランザクションも中断を試行しているという意味です。
- commit
- パーティシパントは、トランザクションのコミットに成功すると必要なクリーンアップアクティビティを実行する必要があります。これらのクリーンアップアクティビティは実装により左右されます。例えば、トランザクション中に変更されたデータのキャッシュバックアップはフラッシュされます。まれにコミット処理が完了できない時がありますがこういう場合は、パーティシパントは
SystemException
エラーをスローするはずです。これは、トランザクションの結果に影響を与えませんがエラーがログに残されることになります。コミット処理中にクラッシュが発生した場合、このメソッドは呼び出されない可能性があります。 - rollback
- パーティシパントは、トランザクションが中断されると、必要となるクリーンアップアクティビティを実行する必要があります。ロールバック処理が完了できないことがまれにありますが、こういう場合は、パーティシパントは
SystemException
エラーをスローするはずです。これはトランザクション結果に影響を与えませんがエラーがログに残されます。コミット処理中にクラッシュが発生した場合、このメソッドは呼び出されません。 - unknown
- このメソッドは廃止予定でXTSの今後のリリースからは削除されます。
- error
- 揮発性のパーティシパントはリカバリ処理に関わらないため、このメソッドが呼ばれることはありません。
20.1.2. ビジネスアクティビティ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ビジネスアクティビティのパーティシパントは、「BusinessAgreementWithParticipantCompletion」 or 「BusinessAgreementWithCoordinatorCompletion」 で説明されているインターフェースのいずれかのインスタンスです。
20.1.2.1. BusinessAgreementWithParticipantCompletion リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
BusinessAgreementWithParticipantCompletion
インターフェースは、com.arjuna.wst11.BusinessAgreementWithParticipantCompletionParticipant
インターフェースに従い、BusinessAgreementWithParticipantCompletion
署名記載の署名でWS-Transactions BusinessAgreementWithParticipantCompletion
プロトコルに対応しています。
BusinessAgreementWithParticipantCompletion
署名
close
- トランザクションが問題なく完了しました。パーティシパントはすでに完了準備ができているとコーディネータに通知しています。
cancel
- トランザクションは取り消され、パーティパントは作業をもとに戻す必要があります。パーティシパントはコーディネータに完了済みであると通知できていません。
compensate
- トランザクションがキャンセルされました。パーティシパントはすでに作業は完了済みで必要であれば補正可能である旨をコーディネータに通知しており、この時点で依頼を投げます。補正が実行できない場合、パーティシパントは
FaultedException
エラーをスローし、当トランザクションに対しヒューリスティックな結果に陥る可能性があります。一時的な状況により補正処理が完了できない場合は、パーティシパントはSystemException
エラーをスローしますが、補正アクションはキャンセルされ、トランザクションがヒューリスティックな結果で終了する可能性があります。 status
- パーティシパントの状態を返します。
unknown
- このメソッドは廃止予定で今後のXTSリリースでは削除される予定です。
- error
- システムクラッシュから回復する際にまれに、以前に完了したパーティシパントを補正できない場合があります。このような場合は
error
操作が呼び出されます。
20.1.2.2. BusinessAgreementWithCoordinatorCompletion リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
BusinessAgreementWithCoordinatorCompletion パーティシパントは、
com.arjuna.wst11.BusinessAgreementWithCoordinatorCompletionParticipant
インターフェースに従い、BusinessAgreementWithCoordinatorCompletion 署名に記載の署名でWS-Transactions BusinessAgreementWithCoordinatorCompletion
プロトコルに対応しています。
BusinessAgreementWithCoordinatorCompletion 署名
close
- トランザクションは問題なく完了しました。パーティシパントはすでに完了準備ができている旨をコーディネータに通知しています。
cancel
- トランザクションがキャンセルされ、パーティシパントは作業のやり直しを行う必要があります。
compensate
- トランザクションがキャンセルされました。パーティシパントは作業が完了しているが必要であれば補正を行える旨をコーディネータに通知済みで、補正を行うようリクエストをしています。まれに、補正が実行できない場合は、パーティシパントは
FaultedException
エラーをスローし、トランザクションがヒューリスティックな結果に陥る可能性があります。一時的な状況で補正処理が完了しない場合、パーティシパントはSystemException
エラーをスローする必要がありますが、この場合補正アクションがキャンセルされ、トランザクションがヒューリスティックな結果で終了してしまう可能性があります。 complete
- コーディネータはパーティシパントに対し、ビジネスアクティビティの範囲内で行う必要のある全作業が完了し、一時的な変更を永続化すべきであると通知しています。
status
- パーティシパントの状況を返します。
unknown
- このメソッドは廃止予定でXTSの今後のリリースからは削除されます。
error
- システムクラッシュから回復時まれに、以前に完了したパーティシパントの補正ができない場合があります。このような場合は
error
メソッドが呼び出されます。
20.1.2.3. BAParticipantManager リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Business Activity プロトコルを正常に機能させるには、パーティシパントが自発的にコーディネータに対して状況の変化について通知できなければなりません。トランザクションが終了した場合、コーディネータがコーディネータとパーティシパント間のインターラクションを開始させるAtomic Transaction プロトコルとは違い、BAParticipantManager インターラクションのパターンでは、ビジネスアクティビティが有効な間であればいつでもパーティシパントがコーディネータと対話できなければなりません。
パーティシパントがビジネスアクティビティに登録された場合は常に、コーディネータに対するハンドルを取得します。このハンドルは、BAParticipantManager メソッドに記載されているメソッドを持つcom.arjuna.wst11.BAParticipantManager インターフェースインスタンスです。
BAParticipantManager メソッド
exit
- パーティシパントは
exit
メソッドを使い、アクティビティから離れていることをコーディネータに通知します。ビジネスアクティビティの終了時、終了方法については通知されます。このメソッドは、パーティシパントがactive
な状態 (あるいはParticipantCompletion
プロトコルに登録されているパーティシパントの場合はcompleting
のステート)である間のみ、呼び出されます。パーティシパントがこれ以外の状態のときに呼び出されると、WrongStateException
エラーがスローされます。exit
はアクティビティ全体を終了あるいはキャンセル/補正できないようにするのではなく、離れたパーティシパントがアクティビティの完了、終了、補正に関わらないようにするだけです。 completed
- パーティシパントの作業は完了しているが、アクティビティ終了時、終了方法が最終的に通知されるようにビジネスアクティビティを継続したい場合などです。パーティシパントは、完了した作業の補正を後に依頼される場合や、アクティビティの終了を知る場合があります。
fault
- 通常のアクティベーション時にパーティシパントにエラーが発生し、アクティビティの補正を試行しました。
fault
メソッドは、ビジネスアクティビティを強制的にcancel-only
モードにします。障害のあるパーティシパントはアクティビティの完了、終了あるいは補正には関わらないようになります。