private void KickProcessInternal(string instanceId, bool autoRetry) { log.Info("Kicking process {0}", instanceId); try { AccessProcessReadWriteLock(instanceId, delegate(ProcessInstance pi) { //pi.Activate(); pi.Kick(); //pi.Passivate(); }); } catch (Exception ex) { log.Error("Error kicking process {0} : {1}", instanceId, ex); if (autoRetry) { InstanceRepository.SetProcessInstanceErrorStatus(instanceId, ex.ToString()); KickProcessEvent kpe = new KickProcessEvent(); kpe.InstanceId = instanceId; MessageBus.Notify("NGEnvironment", "NGEnvironment.KickProcess.Retry." + instanceId, kpe, true); } else { throw ex; } } }
private object KickProcessInternal(string pid, bool handleRetry) { log.Info("Kicking process {0}", pid); try { Environment.KickProcess(pid); } catch (Exception ex) { //hm, should be more transactional... log.Error("Error kicking process {0}: {1}", pid, ex); if (handleRetry) { log.Info("Scheduling retry message for process {0}", pid); INGEnvironmentContext ctx = (INGEnvironmentContext)Environment; ctx.InstanceRepository.SetProcessInstanceErrorStatus(pid, ex.ToString()); KickProcessEvent ev = new KickProcessEvent(); ev.InstanceId = pid; MessageBus.Notify("NGEngine", "NGEngine.KickProcess.Retry." + pid, ev, true); } else { throw; } } return null; }