2012-03-30 6 views
1

私はJava EEのsessionオブジェクトがデータベースへの接続のような複雑なオブジェクトを格納できることを知っています。Java EEのセッション.vsでconexionを保存する。接続プール

私は、Java EEで作成されたプログラミング練習用の特定のアプリケーションを実装する方法を熟考しています。私の最初の選択肢は、Java EEで非常に簡単な接続プールを使用することです。

私は、好奇心の怪しさから、クライアントがセッションを開始してそこに保存するときにいつでもデータベースへの接続を作成するという長所と短所を、その決定を適切に正当化することを考えています接続プール

ありがとうございます。

答えて

2

リソースプールは、システムが対処できる方法でリソースの処理(データベース接続)を最適化します。開いている接続が多い場合は、リソースが不足する可能性があります。

これは、セッションコンテキストでデータベース接続を保存すると発生する可能性が高くなります。 Webアプリケーションを常にデータベースに接続する必要はなく、新しい接続の開始時に接続を確立し、最後に接続を閉じることができます。リソースプールを使用すると、不要になったプールに接続が返されます。新しいユーザー(Webパラダイムのセッション)は、新しいリソースを作成する代わりに、既にリリースしているリソースを使用できます。

プールでは、一部のリソースが長い間アイドル状態になっている(誰も特定の時間内にそれらを使用していない)シナリオを処理し、その後、それらのリソースを解放します。

セッションでデータベース接続を保存するときは、リソースを解放することは決してありませんが、ユーザーセッションと同じ長さの永続的な参照が保持されます。あなたは短時間で問題に直面することはできません。特に、同時に接続するユーザーがほとんどない場合は特にそうです。しかし、実際のアプリケーションでは、それらを確実に見つけることができます。

したがって、セッションコンテキストにデータベース接続を格納することは、の悪い方法とみなされます。

EDIT:私は、アプリケーションサーバがセッションを不動態化することを決定した場合、アプリケーションサーバは、それを再活性化することを決定したときに、それが持続し、復元することができ、それが唯一のようにセッションでSerializableオブジェクトを格納する必要があります言及するのを忘れてしまいました。データベース接続はSerializableリソースではありません。

1

接続プールを使用すると、接続の可用性を最大限に高めることができます。これは接続が少ないことを意味します。メモリは少なくなります=ソケットが少なくなります。プールがセッションに保存するよりも優れている理由は、誰かが予期せず脱落した場合です。あなたのセッションで接続している場合は、長い間、おそらく無期限に接続を維持する危険性があります。