1

データベース接続は以下のようになります

public Connection getDBConection(){  
   Context context = new InitialContext();  
   DataSource dataSource = (javax.sql.DataSource) context.lookup("java:myDataSource");  
   Connection conn = dataSource.getConnection();  
}  

userA の場合、各データベース要求はgetDBConnection()1 回呼び出す必要があります。すべてのリクエストを制御する必要はありませんが、同じ接続を使用しますか?

つまり、userA に 3 つのデータベース要求がある場合、userA はgetDBConnection()3 回呼び出しConnection.closed()、各要求で使用された後に呼び出す必要がありますか?

userA がgetDBConnection()3 回呼び出した場合 (つまり、3 回呼び出した場合dataSource.getConnection())、3 つの接続が作成されますか? それとも不明であり、weblogicによって制御されていますか?

非常に混沌としているように感じます。1 つのデータベース要求に対して 1 つの新しい接続が存在するというのは本当ですか? またはDataSource.getConnection()、データベース要求ごとに呼び出すだけで、作成される新しい接続の数は Web サーバーによって制御されます。実際に作成される接続の数を考える必要はありません。

4

1 に答える 1

4

を呼び出すたびDataSource.getConnectionに、データ ソースが接続を取得します。返された接続が他のユーザーによって積極的に使用されていないことは事実ですが、必ずしも新しい接続であるとは限りません。

たとえば、非常に一般的な方法である接続プールを使用する場合、 を呼び出すConnection.closeと、接続は実際には閉じられませんが、代わりに使用可能な接続のプールに戻ります。次に、 を呼び出すDataSource.getConnectionと、接続プールは、まだ割り当てられていない予備の接続があるかどうかを確認します。その場合、通常、それらが古くなっていないことをテストします (通常は、ダミー テーブルに対して非常に簡単なクエリを実行することによって)。そうでない場合は、既存の接続を呼び出し元に返します。ただし、接続が古い場合、接続プールは基礎となるデータベース ドライバーから真に新しい接続を取得し、代わりにそれを返します。

通常、接続プールには、一度に保持できる実際の接続の最大数 (50 など) があります。アプリケーションが 50 を超える同時接続を要求しようとするとDataSource.getConnection、例外がスローされます。または、一部の実装では、使用可能になるまでしばらくブロックし、その時間が経過すると例外をスローします。サンプルの実装については、Apache Commons DBCPをご覧ください。

うまくいけば、それはあなたの質問に答えます!

于 2013-03-01T16:43:53.963 に答える