3


0

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

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

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

*更新:*オラクルPUは月に1、2回更新されることはめったになく、sybase PUは非常に頻繁に更新されます - 1日に何度も更新されます。 分離は確実に後者にとっての関心事であり、2つの間の一貫性は強制する必要はありません。

2 Answer


3


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

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

読み取り操作中であっても、すべてのユーザーに適用されるロックについてのいくつかの洞察を得るために、http://www.oracle.com/technology/oramag/oracle/05-nov/o65asktom.html [分離レベルについて学ぶ]データベースのような耐久性のある店。 トランザクションロックは不要な場合があります。たとえば、事実上変化しないデータを扱う場合は不要です(any appによる書き込みなし)。

ここにビジネスソリューションがあるかもしれません - あなたのベンダーと交渉してXA対応の価格を下げ、そしてそれを支払いなさい。 経済では、あなたはあなたが余裕がある取引を得るかもしれません。 サイドノート:データベースにライセンスを供与してトランザクションを取得できないことに驚きました。 そのようにしてSybaseにライセンスを供与することが可能であることを私は知りませんでした。


1


http://www.atomikos.com/Main/TransactionsEssentials[Atomikos TransactionsEssentials]は、JDBC(およびJMS)用の接続プールを備えた無料のオープンソースJTA / XAです。

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

ベストガイ