/** * Execute this process. * * @param conn the database connection * @throws ServletException */ public String execute(ConnectionProvider conn) throws ServletException { Process process = null; try { process = bundle.getProcessClass().newInstance(); } catch (final Exception e) { log.error(e.getMessage(), e); throw new ServletException(e.getMessage(), e); } final String requestId = SequenceIdData.getUUID(); String status = SCHEDULED; final ProcessContext ctx = bundle.getContext(); ProcessRequestData.insert( conn, ctx.getOrganization(), ctx.getClient(), ctx.getUser(), ctx.getUser(), requestId, bundle.getProcessId(), ctx.getUser(), status, "Direct", ctx.toString(), "", null, null, null, null); final String executionId = SequenceIdData.getUUID(); final long startTime = System.currentTimeMillis(); long endTime = startTime; status = PROCESSING; ProcessRunData.insert( conn, ctx.getOrganization(), ctx.getClient(), ctx.getUser(), ctx.getUser(), executionId, status, null, bundle.getLog(), requestId); try { log.debug("Calling execute on process " + requestId); process.execute(bundle); endTime = System.currentTimeMillis(); status = SUCCESS; } catch (final Exception e) { endTime = System.currentTimeMillis(); status = ERROR; log.error("Process " + requestId + " threw an Exception: " + e.getMessage(), e); throw new ServletException(e); } finally { final String duration = ProcessMonitor.getDuration(endTime - startTime); ProcessRequestData.update(conn, COMPLETE, requestId); ProcessRunData.update(conn, ctx.getUser(), status, duration, bundle.getLog(), executionId); } return executionId; }