2011-06-26 9 views
0

私は、Javaサーブレット用のドライバをロードするための「正しい」方法が何であるか疑問に思っていました。JDBC/Connectorj:ドライバをいつ読み込むのですか?

現在、私はアプリケーションの冒頭で呼び出すInitializeDrivers()関数を持っています。

public static boolean InitializeDrivers() 
{ 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     return true; 
    } catch (ClassNotFoundException ex) { 
     // log error 
     return false; 
    } 
} 

これが完了したら、受信したHTTPリクエストに応じて、さまざまなリクエスト/データベースへの挿入を実行します。しかし、私のサーブレットは1秒間に何百もの要求を受け取ることができるので、InitializeDrivers()はリクエストごとに1回呼び出されます。

これを行う正しい方法ですか、またはドライバを一度だけロードする方法がありますか?

答えて

2

サーブレットでデータベースを使用している場合は、サーブレットでデータベース接続を直接取得するのではなく、サーブレットコンテナが接続プールを介してデータベース接続を管理するようにしてください。

データベースサーバーへの接続を開くことは、比較的遅い操作です。また、データベースが同時に処理できる接続数には限界があります。データベースにアクセスする必要があるたびにデータベース接続を開くと、アプリケーションの処理速度が低下し、スケーラビリティが低下します。また、データベース接続はスレッドセーフではないため、サーブレットの静的メンバー変数にデータベース接続を格納したり、その都度使用することはできません。

接続プールは、(データベースにアクセスする必要があるたびに接続を開く必要がないように)多数の開いている接続を管理し、同時に開いている接続の数を管理します。たとえば、Apache Tomcatでは、オブジェクトをJNDI経由で検索し、Connectionオブジェクトを取得するように設定できます。

このページでは、Tomcatを設定し、サーブレットでDataSourceを使用する方法について説明します。

JNDI Datasource HOW-TO

あなたがこれを行うにはしたくないと、あなたのサーブレットからのデータベース接続を継続して使用する場合は(私はそして、あなたは、サーブレットの静的初期化子ブロックにドライバを読み込むことができ、)はお勧めしません:JDBC 4.0で、明示的にドライバをロードすることはもはや必要ではないことを

public class MyServlet extends HttpServlet { 
    static { 
     Class.forName("com.mysql.jdbc.Driver"); 
    } 

    // ... 
} 

注意を。 JDBCは、クラスパス内にある限り、ドライバを自動的に検索します。

+0

それは素晴らしい答えです、ありがとう! – Mathieu

+0

私は接続プールで遊び始めたので、別の質問につながった。あなたの専門知識を再び共有してもかまいません:http://stackoverflow.com/questions/6500452/jdbc-connectorj-understanding-connection-pooling :) – Mathieu

関連する問題