8.3.5 Sagaおよびロックフリー予約を使用するJavaアプリケーションの開発
Spring RESTおよびMicronautアプリケーションのMicroTx Sagaライブラリでは、ロックフリー予約がサポートされています。
Spring RESTベースのアプリケーションのMicroTxライブラリのリファレンス情報は、Oracle® Transaction Manager for Microservices Spring Boot APIリファレンスfor Sagaを参照してください。
マイクロサービスでリソース・マネージャとしてOracle Database 23aiのみを使用する場合、Oracle Databaseが提供するSagasを使用してトランザクションを管理できます。1つのマイクロサービスがOracle Database 23aiをリソース・マネージャとして使用し、他のマイクロサービスが他のデータベースを使用する場合、MicroTx SagaライブラリをSpring RESTおよびMicronautアプリケーションと統合して、Oracle Database 23aiのロックフリー予約機能を活用できます。
ロックフリー予約機能は、Oracle Database 23aiで導入されました。『Database開発ガイド』のロックフリー予約の使用を参照してください。
- MicroTxクライアント・ライブラリのプロパティ値を設定します。ロックフリー予約を有効にするには、Spring-RESTベースのアプリケーションの
spring.microtx.lra.lock-free-reservation-active
プロパティまたはMicronautアプリケーションのmicrotx.lra.lock-free-reservation-active
プロパティにtrue
を設定する必要があります。その他のライブラリ・プロパティの詳細は、「JavaアプリケーションのMicroTxライブラリ・プロパティの構成」を参照してください。 com.oracle.microtx.lra.lockfree
パッケージをインポートします。import com.oracle.microtx.lra.lockfree;
- アプリケーション・ロジックがトランザクションを開始または結合する前に、アプリケーション・コードに
MicroTxLockFreeReservation
クラスのインスタンスを注入することで、MicroTxロックフリーAPI抽象化を利用します。MicroTxLockFreeReservation
クラスはLockFreeReservation
インタフェースを実装します。- Spring-RESTベースのアプリケーションの場合は、次のコード行を追加します。
@Autowired private MicroTxLockFreeReservation microTxLockFreeReservation;
- Micronautアプリケーションの場合は、次のコード行を追加します。
@Inject private MicroTxLockFreeReservation microTxLockFreeReservation;
- Spring-RESTベースのアプリケーションの場合は、次のコード行を追加します。
- トランザクションを開始するアプリケーションのコードを変更して、トランザクション境界を設定し、トランザクションを開始します。
microTxLockFreeReservation.begin(connection); ... // Business logic to begin a transaction.
ここで、
connection
は、アプリケーションがアプリケーション・データの読取りおよびOracle Databaseへの書込みに使用するデータベース接続の名前です。 - トランザクションに参加するアプリケーションのコードを変更して、トランザクション境界を設定し、トランザクションを結合します。
microTxLockFreeReservation.join(connection); ... // Business logic to join an existing transaction.
ここで、
connection
は、アプリケーションがアプリケーション・データの読取りおよびOracle Databaseへの書込みに使用するデータベース接続の名前です。 - ビジネス・ロジックに基づいて、トランザクションを完了または補正します。
- トランザクションを完了するには:
microTxLockFreeReservation.complete(connection);
- トランザクションを補正するには:
microTxLockFreeReservation.compensate(connection);
ここで、
connection
は、アプリケーションがアプリケーション・データの読取りおよびOracle Databaseへの書込みに使用するデータベース接続の名前です。 - トランザクションを完了するには:
次のサンプル・コードは、トランザクションに参加するSpring RESTベースのアプリケーションに対してjoin()
、complete()
およびcompensate()
を使用して、トランザクション境界を設定する方法を示しています。太字のコード行は、MicroTxライブラリを統合するために既存のアプリケーション・コードに追加されるコード行を示します。サンプル・コードは、読みやすくするために省略記号(...)を使用して一部を省いています。microtx-samples
GitHubリポジトリのlra/lockfree
フォルダにサンプル・コード全体を表示できます。
import com.oracle.microtx.lra.lockfree;
...
// code specific to application's business logic
...
//Create an instance of the MicroTxLockFreeReservation
class
//which implements the LockFreeReservation
interface
@Autowired
private MicroTxLockFreeReservation microTxLockFreeReservation;
...
@RequestMapping(value="/APPLICATION-URL", method = RequestMethod.POST)
@LRA(value=LRA.Type.MANDATORY, end = false)
....
// In the transaction participant application code,
// provide business logic for the join method so that the
// participant app can join an existing transaction, that MicroTx coordinates.
microTxLockFreeReservation.join(connection);
@RequestMapping(value="/complete", method = RequestMethod.PUT)
@Complete
// application specific business logic to complete the transaction
...
//In transaction initiator and transaction participant application code,
// provide business logic for the complete and compensate methods so that the
// that MicroTx coordinator can call these methods.
microTxLockFreeReservation.complete(connection);
...
@RequestMapping(value="/compensate", method = RequestMethod.PUT)
@Compensate
// application specific business logic to compensate the transaction
...
//
microTxLockFreeReservation.compensate(connection);
...
同様に、トランザクション・イニシエータ・アプリケーションのトランザクション境界を設定できます。唯一の変更点は、トランザクションを開始するためにbegin()
メソッドをコールし、参加側アプリケーションでのみ使用されるjoin()
メソッドをコールしないことです。
MicroTxライブラリを使用するサンプルSpring RESTベースのトランザクション・イニシエータ・アプリケーションのソース・コードは、microtx-samples
GitHubリポジトリのtrip-manager-springboot
フォルダにあります。MicroTxライブラリを使用するサンプルSpring RESTベースのトランザクション参加側アプリケーションのソース・コードは、microtx-samples
GitHubリポジトリのhotel-springboot
フォルダにあります。MicroTxライブラリをアプリケーションと統合する際にこれらのファイルを参照として使用し、Oracle Database 23aiのロックフリー予約機能を活用できます。
親トピック: SagaでのJavaアプリケーションの開発