私は、永続性のためのMDB、バネ統合およびJPAに基づいたイベントドリブンアプリケーションを持っています。 アプリケーションは、max-pool-sizeのデフォルト値(16)でweblogic 10.3にデプロイされます。MDBのレース条件:これを処理する最善の方法は何ですか?
私のアプリケーションは、DBを変更するメッセージを処理する必要があります。 ドメイン・オブジェクトが存在しない場合は挿入するか、存在する場合は更新する必要があるというメッセージを処理する必要があるとします。
オブジェクトが存在するかどうかをチェックし、JPA上でマージを呼び出すという私のコンポーネントは、DBチェックを変更します。 DAO上でマージを呼び出すと、並行して2つのメッセージが同時に実行されるため、オブジェクトはまだ永続化されていないため、JPAは2つのinsert文をトリガします。
イベントドリブンアプリケーションでこの種の「競合状態」を処理するパターンはありますか?
種類が
マッシモ
OK、すてきなショット。シリアライズ可能な分離レベルがノードに対して直列化可能であるか、クラスタに対して直列化可能かどうかを知っていますか?私は2つのノードを持つクラスタにアプリケーションを配備する必要があります。敬具。 Massimo –
@MassimoUgues:トランザクションマネージャに依存しますが、通常はデータベースレベルの分離であるため、クラスタに対して安全です。 – skaffman
私は春JTAを使用しているので、クラスタに対して安全です。私は分離= SERIALIZABLEという大きなボトルネックになると考えていました。この種の並行処理は、同じIDで識別される一部のドメインオブジェクトに影響を与えるメッセージに対してのみ処理する必要があるため、DBベースのモニタ(IDの更新のための何らかの選択)を考えていました。あなたはそれについてどう思いますか? –