package at.gv.egovernment.moa.id.auth.servlet; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringEscapeUtils; import org.springframework.beans.factory.annotation.Autowired; import at.gv.egovernment.moa.id.advancedlogging.TransactionIDUtils; import at.gv.egovernment.moa.id.auth.exception.MOAIllegalStateException; import at.gv.egovernment.moa.id.commons.MOAIDAuthConstants; import at.gv.egovernment.moa.id.commons.api.IRequest; import at.gv.egovernment.moa.id.commons.api.exceptions.MOAIDException; import at.gv.egovernment.moa.id.process.ProcessEngine; import at.gv.egovernment.moa.logging.Logger; /** * Servlet that resumes a suspended process (in case of asynchronous tasks). * * @author tknall * */ public abstract class AbstractProcessEngineSignalController extends AbstractController { @Autowired protected ProcessEngine processEngine; protected void signalProcessManagement(HttpServletRequest req, HttpServletResponse resp) throws IOException { String pendingRequestID = StringEscapeUtils.escapeHtml(getPendingRequestId(req)); IRequest pendingReq = null; try { if (pendingRequestID == null) { throw new MOAIllegalStateException("process.03", new Object[]{"Unable to determine MOA pending-request id."}); } pendingReq = requestStorage.getPendingRequest(pendingRequestID); if (pendingReq == null) { Logger.info("No PendingRequest with Id: " + pendingRequestID + " Maybe, a transaction timeout occure."); throw new MOAIDException("auth.28", new Object[]{pendingRequestID}); } //change pending-request ID requestStorage.changePendingRequestID(pendingReq); pendingRequestID = pendingReq.getRequestID(); //add transactionID and unique sessionID to Logger TransactionIDUtils.setSessionId(pendingReq.getUniqueSessionIdentifier()); TransactionIDUtils.setTransactionId(pendingReq.getUniqueTransactionIdentifier()); // process instance is mandatory if (pendingReq.getProcessInstanceId() == null) { throw new MOAIllegalStateException("process.03", new Object[]{"MOA session does not provide process instance id."}); } // wake up next task processEngine.signal(pendingReq); } catch (Exception ex) { handleError(null, ex, req, resp, pendingReq); } finally { //MOASessionDBUtils.closeSession(); TransactionIDUtils.removeTransactionId(); TransactionIDUtils.removeSessionId(); } } /** * Retrieves the current pending-request id from the HttpServletRequest parameter * {@link MOAIDAuthConstants#PARAM_TARGET_PENDINGREQUESTID}. *

* Note that this class/method can be overwritten by modules providing their own strategy of retrieving the * respective pending-request id. * * @param request * The unterlying HttpServletRequest. * @return The current pending-request id. */ public String getPendingRequestId(HttpServletRequest request) { return StringEscapeUtils.escapeHtml(request.getParameter(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID)); } }