Exemplo n.º 1
0
  /**
   * 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;
  }