1 19 package org.openbravo.erpCommon.utility; 20 21 import java.io.*; 22 import org.apache.log4j.Logger ; 23 24 public class Task extends Thread { 25 26 private String m_cmd; 27 private Process m_child; 28 private StringBuffer m_out; 29 private StringBuffer m_err; 30 private InputStream m_outStream; 31 private InputStream m_errStream; 32 private OutputStream m_inStream; 33 private Thread m_outReader; 34 private Thread m_errReader; 35 static Logger log4j = Logger.getLogger(Task.class); 36 37 38 public Task(String cmd) { 39 m_child = null; 40 m_out = new StringBuffer (); 41 m_err = new StringBuffer (); 42 m_outReader = new Thread () { 43 public void run() { 44 if (log4j.isDebugEnabled()) log4j.debug("Task.outReader.run"); 45 try { 46 int c; 47 for(;(c = m_outStream.read()) != -1 && !isInterrupted(); m_out.append((char)c)); 48 m_outStream.close(); 49 } catch(IOException ioe) { 50 log4j.error("Task.outReader" + ioe); 51 } 52 if (log4j.isDebugEnabled()) log4j.debug("Task.outReader.run - done"); 53 } 54 }; 55 m_errReader = new Thread () { 56 public void run() { 57 if (log4j.isDebugEnabled()) log4j.debug("Task.errReader.run"); 58 try { 59 int c; 60 for(;(c = m_errStream.read()) != -1 && !isInterrupted(); m_err.append((char)c)); 61 m_errStream.close(); 62 } catch(IOException ioe) { 63 log4j.error("Task.errReader" + ioe); 64 } 65 if (log4j.isDebugEnabled()) log4j.debug("Task.errReader.run - done"); 66 } 67 }; 68 m_cmd = cmd; 69 } 70 71 public void run() { 72 if (log4j.isDebugEnabled()) log4j.debug("Task.run"); 73 try { 74 m_child = Runtime.getRuntime().exec(m_cmd); 75 m_outStream = m_child.getInputStream(); 76 m_errStream = m_child.getErrorStream(); 77 m_inStream = m_child.getOutputStream(); 78 if(checkInterrupted()) return; 79 m_outReader.start(); 80 m_errReader.start(); 81 if(checkInterrupted()) return; 82 m_errReader.join(); 83 if(checkInterrupted()) return; 84 m_outReader.join(); 85 if(checkInterrupted()) return; 86 } catch (Exception e) { 87 log4j.error("Task.run - error: " + e); 88 return; 89 } 90 try { 91 m_child.waitFor(); 92 } catch(InterruptedException ie) { } 93 try { 94 if(m_child != null) if (log4j.isDebugEnabled()) log4j.debug("Task.run - ExitValue=" + m_child.exitValue()); 95 } catch(Exception e) { } 96 if (log4j.isDebugEnabled()) log4j.debug("Task.run - done"); 97 return; 98 } 99 100 private boolean checkInterrupted() { 101 if(isInterrupted()) { 102 if (log4j.isDebugEnabled()) log4j.debug("Task.checkInterrupted - true"); 103 if(m_child != null) m_child.destroy(); 104 m_child = null; 105 if(m_outReader != null && m_outReader.isAlive()) m_outReader.interrupt(); 106 m_outReader = null; 107 if(m_errReader != null && m_errReader.isAlive()) m_errReader.interrupt(); 108 m_errReader = null; 109 if(m_inStream != null) 110 try { 111 m_inStream.close(); 112 } catch(Exception e) { } 113 m_inStream = null; 114 if(m_outStream != null) 115 try { 116 m_outStream.close(); 117 } catch(Exception e) { } 118 m_outStream = null; 119 if(m_errStream != null) 120 try { 121 m_errStream.close(); 122 } catch(Exception e) { } 123 m_errStream = null; 124 return true; 125 } else { 126 return false; 127 } 128 } 129 130 public StringBuffer getOut() { 131 return m_out; 132 } 133 134 public StringBuffer getErr() { 135 return m_err; 136 } 137 138 public OutputStream getInStream() { 139 return m_inStream; 140 } 141 } 142 | Popular Tags |