2011-09-15 8 views
0

私は非常にひどくコード化されたJSPサイトでいくつかの作業をしています。 1回のデータベース呼び出しごとに、元のプログラマが開き、データベース接続を閉じます。私はいくつかの新しいデータベース操作を追加していますし、少し上手くやってみたいです(もっと多くのサイトを再構築できるようになると、後になります)。私は、セッションが開始したとき(ログイン後)に単一のデータベース接続を作成し、それをセッションオブジェクトに格納してから、セッションが終了したときにセッションリスナの終わりでそれを閉じることを考えていました。これは健全な戦略ですか?思考?JSPサイトの接続プーリング戦略

+0

春のjdbcTemplateとdbcpのような接続プールです。すべてが多かれ少なかれ自動的に行われます。 – Kevin

答えて

3

私は(ログイン後)は、セッション開始は、セッションオブジェクトに格納する単一のデータベース接続を作成し、セッションが閉じたときにセッション処理機能のセッションリスナーのエンドでそれを閉じて考えていました。これは健全な戦略ですか?思考?

いいえ。コンテナ管理接続プールデータソースを作成し、webappの起動時にJNDIで取得します。

データソースの作成方法は問題のコンテナによって異なります。例えばTomcat 6.0の場合は、ここで読むことができます:Tomcat JNDI Resources HOW-TO - JDBC Data Sources。たとえばGlassfish 3の場合は、Webベースの管理コンソールhttp://localhost:4848で実行できます。ここで

は、あなたが最終的にJNDIからそれを得ることができる方法は次のとおりです。

DataSource dataSource = (DataSource) new InitialContext().lookup(jndiName); 
// ... 

あなたがそれにgetConnection()を呼び出すことができます。 webappの起動時には、たとえばデータベース接続マネージャの静的イニシャライザブロックや、おそらくServletContextListenerにデータソースを取得するだけで十分です。

接続は常に可能な限り最短の範囲で取得して閉じてください。クエリを実行しているtryブロック内に取得し、非常に同じtryブロックのfinallyで閉じます。接続を必要以上に長く開いたままにしないでください。接続プールはそれらを開いたままにすることに注意します。そのため、パフォーマンスはすでに大幅に向上しています。

0

あなたのアイデアにコメントしていないので(私はそのようにしていないので、私は確かにわかりません)、私はいつもそれがこのような何かを見たと言います(承認された回答を参照):

あなたのServletContext(またはJSPの用語では「アプリケーションスコープ」)に保存されている Common DBCP's PoolingDataSourceインスタンスを使用手始めに

How to reuse the same connection with a Spring's JdbcTemplate?

0

理想的には、私はSpring(またはGuiceなど)に移行することを検討します。

関連する問題