今日:
私は、非常に基本的な選択、更新、および挿入を実行する同じ資格情報を使用して、同じ (Oracle) データベースへの多数の (sql) 接続を常に作成および閉じるアプリケーションで作業を続けています。
現在、 asingleton CustomConnectionManager
はそのプールをチェックして、配布可能な があるかどうかを確認しますCustomConnector
。一度配布されると、それらはクライアントによって閉じられる場合があります。基礎close()
となるSQLConnection
(によって作成および維持されるCustomConnector
) も閉じられます。が利用できない場合CustomConnector
は、新規CustomConnector
作成されます。
これの良いところは、使用するたびに最終的にSQLConnection
閉じたままになることですが、値が not にあるため、再利用はほとんど行われSQLConnection
ませんCustomConnector
。
システムのすべてのユーザーが同じデータベースに接続するため、同じ単一の接続を使用してすべての要求に対応できます。要求ごとに新しいコネクタを作成する元のソリューションは、非常に無駄に思えます。
提案:
singleton CustomConnectionManager
2 つのキューを維持します。
- available のキュー
CustomConnector
、それぞれがそれ自身を維持しSQLConnection
、 - s のキュー
inUse
CustomConnector
。リクエストに応じて、新しいCustomConnector
ものを作成して配布します。
クライアントとの対話は、singleton CustomConnectionManager
.
新しい接続が必要になると、マネージャーはそれを作成し、クライアントに渡し、inUse
キューに入れます。クライアントが接続の使用を終了すると、接続を閉じる代わりに、クライアントは.markConnectorAvailable()
それをキューに戻しavailableConnectors
ます (クライアントは基になる SQLConnection を制御できなくなります)。
質問 1: どう思いますか? これは機能しますか?すでにこれをうまく行っている既存のソリューションはありますか?
CustomConnector
質問 2: 提案されたアプローチが完全な無駄ではない場合、 がSQLConnections を閉じるのに適した点は何ですか?