2

私は WebApp を開発していますが、メソッド間で JDBC 接続オブジェクトを共有することの長所/短所があるかどうかを知りたいです。

だから状況は

  • これは、WebApp およびマルチユーザー環境です (約 1000 ユーザーが同時に使用)
  • 接続プーリングをサポートするコンテナを使用しています (Weblogic Server)
  • JDBC 呼び出しでトランザクションを使用しています
  • 私の JDBC 呼び出しのほとんどは単一レコードの挿入/更新ですが、選択/削除は一括で発生する可能性があります

今、私は2つのアプローチを持っています

アプローチ 1 接続オブジェクトを 1 回開き、メソッド間で中継する

// Just a Pseudo Code

Cn = OpenJDBConnection() // This will open up the  connection 
obj.Task1(Cn, Param1, Param2);
obj.Task2(Cn, Param1, Param2);
obj.Task3(Cn, Param1, Param2);
Cn.close();

アプローチ 2 各メソッドで接続を開いたり閉じたりする

私はアプローチ1に頼っています。そうすれば、定型コードを回避できるからです。しかし、それがスレッドセーフになるかどうかはわかりませんか? 私は 100 接続のプールサイズを持っています。これは、特定の時間にアクティブな 1000 ユーザーに対しては問題ないと思います

アプローチの1つを採用する前に考慮すべきことは他にもありますか

4

1 に答える 1

4

トランザクションは接続レベルで管理されると考えてください。

単純なユースケースでは、アプローチ #1 が機能する可能性がありますが、たとえば、接続で保留中のトランザクションがあり、同じ接続で選択を行う別のメソッドを呼び出すなどの状況に陥りやすいため、トランザクションがコミットされます (予想よりも早く)。

適切に構成された接続プールを使用すると、接続の解放と再取得のオーバーヘッドが最小限になるはずなので、アプローチ #2 をお勧めします。プールされている場合、接続を閉じると実際には閉じられ、開いたままになってプールに戻されます。

于 2012-10-25T01:15:06.770 に答える