3

getAssignedTasksという名前のクラスにメソッドがありTaskService、このメソッドが実際に 2 つのデータソースから情報を取得するdao1.getInfo()としdao2.getMoreInfo()ます。問題は、データベース接続が実際にいつ確立されるかです。

呼び出し時に datasource1 への接続が確立されdao1.getInfo()、この時点 (dao2.getMoreInfo()まだ呼び出されていない) では datasource2 への接続が確立されていないと想定しました。私は正しいですか?getAssignedTasksメソッドをすぐに呼び出すと、両方の接続が確立されますか?

スプリング構成は以下のようなものです

<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
4

1 に答える 1

0

これが仕様定義の動作であるかどうかはわかりません (そうでない場合 - これは JTA 実装によって異なる可能性があります) が、Artomikos jdbc JTA 実装では、接続が必要なときとトランザクションの開始時にのみ行われるようです。

一部のメソッド接続フォームでは、2 番目 (または 3 番目、または 3 番目) の DataSource が使用されない可能性があり、プールからそれを取得することは無駄なオーバーヘッドになるため、これは論理的であるように思われます。

これを調査するための小さなテストを作成しました。これはgithubにあります。独自の調査のためにデバッグすることができます。

于 2012-12-23T11:27:17.713 に答える