3

私たちのアプリケーションは、異なるデータベース (異なる商用ベンダーも) を指すいくつかの異なる永続ユニットを (読み取り専用で) 使用する必要があります。

それらの 1 つ (Sybase) で 2pc を有効にする予算がありません。XA トランザクションでなくてもトランザクションでこれらを使用する方法はありますか?

Websphere 6.1、Sybase 12.5.3、Oracle 10g、Java EE 5、JPA と Hibernate Entity Manager を使用しています。

更新: Oracle PU は月に 1 回か 2 回しか更新されませんが、sybase PU は非常に頻繁に (1 日に何度も) 更新されます。分離は間違いなく後者の懸念事項であり、2 つの間の一貫性を強制する必要はありません。

4

2 に答える 2

3

気をつけろ。
読み取り専用だからといって、必ずしも 2PC が適用されないわけではありません。2 つのデータベースがあり、両方を読み取り、一方のみを更新する場合、一貫した結果を保証するためにトランザクションが必要です。データベース A を読み取り、その結果を使用してデータベース B を読み取り、更新するシナリオがあるとします。データベース A とのトランザクションの使用に失敗した場合、操作がアクティブである間に、読み取ったデータがデータベース A は、別のアプリケーションで読み取りおよび更新できます。この場合、データベース B で一貫性のないデータを取得できます。

本当に両方のデータベースを読み取り、どちらも更新しない場合は、分散トランザクションとそれに伴うロックは不要だと考えるかもしれません。繰り返しますが、そうではないかもしれません。このシナリオでも、他のアプリケーションが同じデータベースを更新している場合、一貫性のない読み取りが発生する可能性があります。これは、要件とデータベースの他のユーザーによって異なります。

分離レベルを読んで、読み取り操作中であっても、データベースなどのすべての耐久性のあるストアに適用されるロックについての洞察を得ることをお勧めします。トランザクション ロックは不要な場合があります。たとえば、実質的に変更されない(アプリ による書き込みがない) データを扱う場合は不要です。

おそらく、ここにビジネス上の解決策があります。ベンダーと交渉して、XA の有効化の価格を引き下げ、それを支払うことです。景気が良ければ、余裕のある取引ができるかもしれません。補足: データベースのライセンスを取得してもトランザクションを取得できないことに驚いています。そのような方法で Sybase のライセンスを取得できることを知りませんでした。

于 2009-05-16T10:43:41.830 に答える
1

Atomikos TransactionsEssentialsは、JDBC (および JMS) 用の接続プールを備えた無料のオープン ソース JTA/XA です。

その機能の 1 つは、非 xa データソースの追加サポートです。読み取り専用の場合 (あなたの場合)、非 xa データソースを使用して Sybase を JTA トランザクションに含めるのは安全で簡単です。

ベストガイ

于 2009-06-02T20:21:34.020 に答える