Ejemplo n.º 1
0
  /**
   * Descripción de Método
   *
   * @param AD_Workflow_ID
   * @return
   */
  private boolean startWorkflow(int AD_Workflow_ID) {
    log.fine(AD_Workflow_ID + " - " + m_pi);

    boolean started = false;

    if (DB.isRemoteProcess() && !m_pi.isAlwaysInClient()) {
      Server server = CConnection.get().getServer();

      try {
        if (server != null) { // See ServerBean
          m_pi = server.workflow(Env.getCtx(), m_pi, AD_Workflow_ID);
          log.finest("server => " + m_pi);
          started = true;
        }
      } catch (RemoteException ex) {
        log.log(Level.SEVERE, "AppsServer error", ex);
        started = false;
      }
    }

    // Run locally

    if (!started) {
      MWorkflow wf = MWorkflow.get(Env.getCtx(), AD_Workflow_ID);
      MWFProcess wfProcess = wf.startWait(m_pi); // may return null

      started = wfProcess != null;
    }

    return started;
  } // startWorkflow
Ejemplo n.º 2
0
  /**
   * Descripción de Método
   *
   * @return
   */
  private boolean startProcess() {
    log.fine(m_pi.toString());

    // Inicializar datos del proceso para documentos e impresiones jasper en
    // el process info
    initilizeProcessInfoAditionals();

    boolean started = false;

    if (DB.isRemoteProcess() && !m_pi.isAlwaysInClient()) {
      Server server = CConnection.get().getServer();

      try {
        if (server != null) { // See ServerBean
          m_pi = server.process(Env.getCtx(), m_pi);
          log.finest("server => " + m_pi);
          started = true;
        }
      } catch (UndeclaredThrowableException ex) {
        Throwable cause = ex.getCause();

        if (cause != null) {
          if (cause instanceof InvalidClassException) {
            log.log(
                Level.SEVERE, "Version Server <> Client: " + cause.toString() + " - " + m_pi, ex);
          } else {
            log.log(Level.SEVERE, "AppsServer error(1b): " + cause.toString() + " - " + m_pi, ex);
          }
        } else {
          log.log(Level.SEVERE, " AppsServer error(1) - " + m_pi, ex);
        }

        started = false;
      } catch (RemoteException ex) {
        Throwable cause = ex.getCause();

        if (cause == null) {
          cause = ex;
        }

        log.log(Level.SEVERE, "AppsServer error - " + m_pi, cause);
        started = false;
      }
    }

    // Run locally

    if (!started) {
      ProcessCall myObject = null;
      boolean error = false;
      // Manejo de transacciones.
      // Si se invocó el proceso con una transacción creada, entonces no se administra
      // esta transacción internamente derivando la ejecución de commit o rollback al
      // cliente que invoca este proceso.
      // Si no se asignó una transacción externa, se crea una transacción interna y se
      // administra en este método a fin de que la ejecución de un proceso sea transaccional
      // (en caso de que las subclases de SvrProcess utilicen el get_TrxName() )
      Trx trx = null;
      boolean ownedTrx = (m_trx == null);
      if (m_trx == null) {
        trx = Trx.get(Trx.createTrxName("ProcessCtl.startProcess"), true);
        trx.start();
      } else trx = m_trx;

      try {
        Class myClass = Class.forName(m_pi.getClassName());

        myObject = (ProcessCall) myClass.newInstance();

        if (myObject == null) {
          m_pi.setSummary("No Instance for " + m_pi.getClassName(), true);
        } else {
          error = !myObject.startProcess(Env.getCtx(), m_pi, trx);
        }
        // Solo se hace commit o rollback de la transacción si es una trx
        // controlada localmente.
        if (ownedTrx && trx != null) {
          if (error) trx.rollback();
          else trx.commit();

          trx.close();
        }
      } catch (Exception e) {
        if (trx != null) {
          trx.rollback();
          trx.close();
        }

        m_pi.setSummary("Error starting Class " + m_pi.getClassName(), true);
        log.log(Level.SEVERE, m_pi.getClassName(), e);
      }
    }

    return !m_pi.isError();
  } // startProcess