2012-02-10 24 views
0

現在、私は接続プーリングを処理するために別のDBConnectionManagerクラスを使用していますが、doGet()メソッドを呼び出すたびにサーブレットが同じプールを呼び出さなかったため、は発表された。サーブレットのJDBC接続プーリング

  1. 誰かが私に上記の理由を説明することはできますか?
  2. JNDIは適切な接続プーリングのためにTomcatを使用してJavaサーブレットに行く方法ですか?

2つの記事へのリンクがありますが、これはサーブレットとの接続プーリングを実装する正しい方法ですか?

http://www.javaranch.com/journal/200601/JDBCConnectionPooling.html

http://onjava.com/onjava/2006/04/19/database-connection-pooling-with-tomcat.html

そうのような文脈でのDBマネージャオブジェクトを保存することが可能です:。

mtdb = (MTDbManager) context.getAttribute("MTDBMANAGER"); 
if (mtdb == null) { 
      System.out 
        .println("MTDbManager is null, reinitialize MTDbManager");    

      initMTDB(config); 
      context.setAttribute("MTDBMANAGER", mtdb); 
     } 

そして私は(mtdb.getInstanceを呼び出す)のgetConnection()とこのオブジェクトを常に参照します。

ありがとうございました。

答えて

4

通常、アプリケーションプールに接続プーリングを残すことをお勧めします。 JNDIを使用してデータソースを検索し、アプリケーションサーバーで残りのデータを処理させます。そのため、アプリケーションは移植性が高くなり(異なるアプリケーションサーバーのプーリングメカニズムと設定が異なります)、最も効率的になる可能性が高くなります。

+0

ちょうど別の質問を、JNDIは、適切な接続プーリングをするのでしょうか?つまり、最大接続数を5に設定すると、6番目のリクエストが入り、JNDIは接続を再試行する前に待機タイムアウトを行います。 – Maurice

+2

JNDI自体はプーリングを行わないため、['javax.sql.DataSource'](http://docs.oracle.com/javase/6/docs/api/javax/sql/DataSource.html)オブジェクトを検索します。接続が必要なときに呼び出す 'getConnection()'メソッドを提供します。使用可能な接続がない場合、 'getConnection()'の呼び出しはブロックされます。 N.B.接続が必要になるたびにJNDIデータソースをルックアップする必要はありませんが、データソースへの参照をキャッシュするのはかなり一般的な方法です。希望が役立ちます。 – beny23

関連する問題