2012-02-21 17 views
2

ユーザー(内部ソフトウェア)によるクエリ要求を収集するために外部スクリプトに依存するWebAppを作成しました。私はnetbeansによって提供されたグラスフィッシュサーバーからWebAppを正常にテストしましたが、アプリケーションをサードパーティのサーバー(Apache Tomcat)にアップロードしようとするたびに、process.getRuntime exitValueは書き込まれず、Runtime.exec()が正しく終了しない

: - >コードは今や標準エラー出力と標準入力の両方を読んだ後に動作

更新:WebAppのは、これは私がこれまで実施してきたコードです....結果ペ​​ージに

を取得することはありません

 pd = new ProcessBuilder("runscript.bat"); 
     pd.redirectErrorStream(true); 
     process = pd.start(); 


     StreamGobbler inputGobbler = new StreamGobbler(process.getInputStream(), "Input"); 
     StreamGobbler errorGobbler = new StreamGobbler(process.getErrorStream(),"Error"); 

     errorGobbler.start(); 
     inputGobbler.start(); 

     int exitVal = -1; 

     try { 
      exitVal = process.waitFor(); 
     } catch (InterruptedException ex) { 
      //log Error 
     } 

class StreamGobbler extends Thread { 
    OutputWriterReader outWR = new OutputWriterReader(); 
    BufferedWriter deadWriter; 
    InputStream is; 

// reads everything from is until empty. 
StreamGobbler(InputStream is, String type) { 
    this.is = is; 
    createWatch(type); 
} 
// depending on if Error stream or Input Stream 
private void createWatch(String type){ 
    try { 

     if(type.equals("Error")) 
      deadWriter = new BufferedWriter(new FileWriter("StdError.txt")); 
     else if(type.equals("Input")) 
      deadWriter = new BufferedWriter(new FileWriter("StdInput.txt")); 

    } catch (IOException ex) { 
     //log Error 
    } 
} 

@Override 
public void run() { 
    try {    
     InputStreamReader isr = new InputStreamReader(this.is); 
     BufferedReader br = new BufferedReader(isr); 
     String line=null; 

     while ((line = br.readLine()) != null) 
      deadWriter.append(line); 

     deadWriter.flush(); 
     deadWriter.close(); 

    } catch (IOException ioe) { 
     //log Error 
    } 
} 

}

Suggerstions?

+0

私はProcess/ProcessBuiderのコードを見ることができますが、 mKorbel

+0

コードのこのセクションに固執しました – Shahab

答えて

3

exitValue()を呼び出すと、プロセスが完了しない場合があります。

process.exitValue()コールの前にadd: process.waitFor();

+0

私はprocess.waitFor()を追加しましたが、サーバー上でまだハングしていますが、ローカルマシン上では完了まで実行されています – Shahab

関連する問題