2016-04-06 4 views
0

私は、Oracle上のテーブルからいくつかの行を読み込んだ後、取得した各行に対してWebサービスを呼び出すJavaアプリケーションを作成しました。
このプロセスは予想以上に時間がかかります。 1秒あたり約4行が呼び出されているので、1秒あたり約50行が必要です。
wsimportツールを使用して、Webサービスにアクセスするためのファイルを生成しました。すべてのプロセスは、ライブラリslf4jとLog4jで記録されています。

プロセス全体の速度を向上させるために何ができますか?
この場合、マルチスレッドのヘルプが表示されますか?webserviceを起動し、プロセス全体を記録するJavaコードの速度を向上させるにはどうすればよいですか?

これは私のコードの簡単です:行の処理が独立しているbeacause

query = "select * from table name where to_char(DATE, 'hh24:mi:ss') >= '"+tMin+"' and to_char(DATE, 'hh24:mi:ss') < '"+tMax+"'"; 

Class.forName("oracle.jdbc.driver.OracleDriver"); 
con = DriverManager.getConnection("jdbc:oracle:thin:"+connection_string); 
stmt = con.createStatement(); 
rs = stmt.executeQuery(query); 

while(rs.next()){ 

    SomeBean n = new SomeBean(); 
    n.setColumn1(rs.getString("Column1")); 
    n.setColumn2(rs.getString("Column2")); 
    n.setColumn3(rs.getString("Column3")); 
    n.setColumn4(rs.getString("Column4")); 
    n.setColumn5(rs.getString("Column5")); 
    v.add(n); 

} 

for(SomeBean s : v) 
{ 

    String Column1 = s.getColumn1); 
    String Column2 = s.getColumn2(); 
    String Column3 = s.getColumn3(); 
    String Column4 = s.getColumn4(); 
    String Column5 = s.getColumn5(); 


    someInfo1.setColumn1(Integer.parseInt(Column1)); 
    someInfo1.setColumn2(Column2); 
    someInfo1.setColumn3(Column3); 

    someInfo2.setColumn4(Column4); 
    someInfo2.setColumn5(Integer.parseInt(Column5)); 

    try 
    {      
     Result resultws = Webservice.webservice(someInfo1, someInfo2); 
    } 
    catch (Exception e) 
    { 
     //catch exception 
    } 
} 

VisualVM - CPU sample

+1

ようにRunnableを内にWebサービスの呼び出しをラップすることですあなたは、ボトルネックを特定するためにJProfilerをまたはJVisualVMのようなプロファイラを使用しようとしましたか? –

+0

はい、私はVisualVMを使用しましたが、どこを見て何をすべきかわかりません。スクリーンショットを投稿しました。 – Rodrick

答えて

1

マルチスレッドは、ここであなたを助けることができます。多くのアプローチがあります。私はExecutorServiceをjavaから使用することを提案します。これは、基本的にWebサービスコール(ExecutorService)を送信するThreadPoolを作成します。しかし、最も簡単な解決策は、この

new Thread(
      new Runnable() { 

       @Override 
       public void run() { 
        Result resultws = Webservice.webservice(someInfo1, someInfo2); 
       } 
      } 
    ).start(); 
関連する問題