2011-10-25 4 views
1

私は、Java Server Faces(JSF)を使用してWebベースのアプリケーションを作成しています。私はちょうどデータベース接続が開いていると、ユーザーがWebページを(ブラウザを閉じる)、JSFは自動的にこの接続を閉じますか?ユーザーがページをJSF内に残すと、データベース接続がクローズされますか?

+0

JPAを使用しているのか、DB接続を自分で管理していますか? –

+0

あなたは何をすると言いますか、コンピュータは自分自身のために考えていません... –

+0

いいえ私はJPAを使用しませんでした。 – Adan

答えて

1

クライアントにデータを送信する前に、データを取得した直後にデータベース接続を終了してから、クライアントに送り返してください。 finallyブロックでそれを行うのが最適です。開いたままにする本当の理由はありませんが、潜在的なメモリリークだけでなく、大きなセキュリティリスクを引き起こします。

+1

トランザクションごとにデータベース接続を開いて閉じることができますか?それが私の現在のアプローチです。サーバーの負荷が大きすぎると思うので、それに対処する別の方法を考えています。データベースプールがこの問題を解決しますか? – Adan

+0

すべてのトランザクションに新しい接続を開くのが標準的な方法です。しかし、接続プールはパフォーマンスを向上させます。いい視点ね! – Pete

3

ページを離れたユーザーは、データベース接続に影響を与えることはできません。ユーザーがページを要求すると、サーバーが応答します。それが彼らの相互コミュニケーションの終わりです。ユーザーがブラウザを閉じるか、サーバーを押し戻すと、これは通知されません。

HTTP応答を作成する前に、コードを閉じることができるのはJavaコードのみです。

+1

これは、マネージドBeanのスコープによって異なります。サーバーが同じセッションから新しい要求(別のページ)を取得した場合、ViewSopedおよびRequestScoped Beanは削除されます。もちろん、ブラウザを閉じることは、セッションがタイムアウトするまでサーバーによって検出されません。 –

+0

はい、ブラウザを閉じるユーザーにはそのような影響はありません。また、新しいリクエストは、新しいHTTPレスポンスなどを生成するためにJavaコードを実行することを意味します。 –

+1

あなたは正しいです、私の最初のコメントを編集しました。 –

0

データベース接続をクローズするか、接続プールがクローズしている場合は接続プールが閉じられます。またはガーベッジ・コレクションが取得されます。