/* * Copyright (c) 2006-2007 Massachusetts General Hospital * All rights reserved. This program and the accompanying materials * are made available under the terms of the i2b2 Software License v1.0 * which accompanies this distribution. * * Contributors: * Raj Kuttan * Lori Phillips */ package edu.harvard.i2b2.workplace.ws; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.workplace.datavo.i2b2message.ResponseMessageType; import edu.harvard.i2b2.workplace.delegate.GetChildrenHandler; import edu.harvard.i2b2.workplace.delegate.RequestHandler; import org.apache.axiom.om.OMElement; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Implements thread runnable interface, to do Workplace * processing using thread. */ public class ExecutorRunnable implements Runnable { private static Log log = LogFactory.getLog(ExecutorRunnable.class); private String inputString = null; private String outputString = null; private RequestHandler reqHandler = null; private Exception ex = null; private boolean jobCompleteFlag = false; public Exception getJobException() { return ex; } public boolean isJobCompleteFlag() { return jobCompleteFlag; } public void setJobCompleteFlag(boolean jobCompleteFlag) { this.jobCompleteFlag = jobCompleteFlag; } public void setJobException(Exception ex) { this.ex = ex; } public String getInputString() { return inputString; } public void setInputString(String inputString) { this.inputString = inputString; } public void setRequestHandler(RequestHandler handler) { this.reqHandler = handler; } public RequestHandler getRequestHandler() { return this.reqHandler; } public String getOutputString() { return outputString; } public void setOutputString(String outputString) { this.outputString = outputString; } public void run() { try { outputString = reqHandler.execute(); setJobCompleteFlag(true); }catch (Exception e) { setJobException(e); } //notify(); } /* public OMElement execute(RequestHandler handler, long waitTime)throws I2B2Exception{ OMElement returnElement = null; String workplaceDataResponse = null; String unknownErrorMessage = "Error message delivered from the remote server \n" + "You may wish to retry your last action"; this.setRequestHandler(handler); // timeout test waitTime=10; Passed 1/29/08 lcp Thread t = new Thread(this); synchronized (t) { t.start(); try { int count = 0; while((workplaceDataResponse == null)&&(count<2)){ if (waitTime > 0) { t.wait(waitTime); } else { t.wait(); } count++; log.debug("workplace ER loop" + count); } workplaceDataResponse = this.getOutputString(); if (workplaceDataResponse == null) { if (this.getJobException() != null) { log.error("er.jobException is not null"); log.error(this.getJobException().getMessage()); log.error(this.getJobException().getStackTrace()); log.info("waitTime is " + waitTime); ResponseMessageType responseMsgType = MessageFactory.doBuildErrorResponse(null, unknownErrorMessage); workplaceDataResponse = MessageFactory.convertToXMLString(responseMsgType); } else if (this.isJobCompleteFlag() == false) { //<result_waittime_ms>5000</result_waittime_ms> String timeOuterror = "Remote server timed out \n" + "Result waittime = " + waitTime + " ms elapsed,\nPlease try again"; log.error(timeOuterror); log.error("for " + this.getRequestHandler().getClass().getName() + " and loop count = " + count); ResponseMessageType responseMsgType = MessageFactory.doBuildErrorResponse(null, timeOuterror); workplaceDataResponse = MessageFactory.convertToXMLString(responseMsgType); } else { log.error("workplace data response is null"); log.info("waitTime is " + waitTime); ResponseMessageType responseMsgType = MessageFactory.doBuildErrorResponse(null, unknownErrorMessage); workplaceDataResponse = MessageFactory.convertToXMLString(responseMsgType); } } } catch (InterruptedException e) { log.error("interrupt exception " + e.getMessage()); ResponseMessageType responseMsgType = MessageFactory.doBuildErrorResponse(null, unknownErrorMessage); workplaceDataResponse = MessageFactory.convertToXMLString(responseMsgType); } finally { t.interrupt(); t = null; } } returnElement = MessageFactory.createResponseOMElementFromString(workplaceDataResponse); return returnElement; }*/ }