2012-04-27 11 views
1

私はダッシュボードアプリケーションを開発しています。ここでは、データベースが稼働しているかどうかをチェックするためにデータベースを連続的に(30秒ごとに)ポーリングする必要があります。データベースが動作しているかどうかを調べるために、テーブルから1行だけを取得する簡単なクエリを作成しています。サーブレットからOracleデータベースに接続するのに時間がかかります

すべて正常に動作しますが、問題は、サーブレットがデータベースへの接続を確立して行を取得するために異常に長い時間がかかることです。このプロセスには約15秒かかります。同じコードをJavaファイルにコピーして、まだそれほど時間がかかっているかどうかを調べました。しかし、私が疑っているように、Javaプログラムを実行するには1〜2秒しかかかりませんでした。私はこの全部に近づいている方法に何か問題があるようです。

私はデータベースを繰り返しポーリングする必要があるので、私はdoGet()関数でデータベース接続コードを書きました。これは私がコミットしている間違いですか? init()でデータベース接続コードを記述し、doGet()関数でクエリを書くだけですか?

ご協力いただければ幸いです。おかげ

は、ここでは私の問題を理解するのに役立つかもしれないコードの一部です:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
//Send Request to DB CAT 
LinkedHashMap<String,String> hm=new LinkedHashMap<String,String>(); 
    try 
    { 
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 
    //CONNECT TO DB 
    String serverName = "*****.1dc.com"; // * is just to hide the real database name 
    int port = 1535; 
    String user = "mbank"; 
    String password = "****"; 
    String SID = "mbkwqa"; 
    String URL = "jdbc:oracle:thin:@" + serverName + ":" + port + ":" + SID; 
    Connection conndb = DriverManager.getConnection(URL, user, password); 
    String SQL = "select CITY from ADDRESS where rownum<=1"; 
    Statement stat = conndb.createStatement(); 
    ResultSet rs = stat.executeQuery(SQL); 
    while (rs.next()) 
    { 
     System.out.println(rs.getString(1)); 
    } 
    stat.close(); 
    conndb.close(); 
    hm.put("Server1","OK"); 
    } 
     catch(Exception e) 
    { 
     hm.put("Server1","Failed");   
    } 
+2

Downvoter、ダウン投票の理由を残すようにしてください。それ以外の場合は、あなたの下降投票は、いかなる方法でも誰にも役立たない。 – CuriousCoder

答えて

4

あなたはdoGet関数からデータベースに接続していますが、これは非常に悪い習慣です。サーブレットに対して100,1000,10000のリクエストがあるとどうなりますか?

デザインを確認する必要があります。

Oracleデータソースへの接続プールを作成し、Servlet ApplicationContextに入れ、Daoクラスを作成し、doGet ServletからDaoクラスを呼び出してください。

私は、これらのチュートリアルが役立つと信じて:

http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html

2

これは、今後、要求のたびのためのDBへの接続を構築することをお勧めではありません。あなたは接続プールを作成する必要があります、それは接続の多くの時間を節約します。 TomcatのconntionプールやApache DBCPを見てください。

関連する問題