public void ApplyState(IWriteOnlyTransaction transaction, ApplyStateContext context) { var filterInfo = GetFilters(context.Job); var filters = filterInfo.ApplyStateFilters; foreach (var state in context.TraversedStates) { transaction.AddJobState(context.JobId, state); } foreach (var handler in _handlers.GetHandlers(context.OldStateName)) { handler.Unapply(context, transaction); } foreach (var filter in filters) { filter.OnStateUnapplied(context, transaction); } transaction.SetJobState(context.JobId, context.NewState); foreach (var handler in _handlers.GetHandlers(context.NewState.Name)) { handler.Apply(context, transaction); } foreach (var filter in filters) { filter.OnStateApplied(context, transaction); } if (context.NewState.IsFinal) { transaction.ExpireJob(context.JobId, context.JobExpirationTimeout); } else { transaction.PersistJob(context.JobId); } }
private void ApplyState(ApplyStateContext context, IEnumerable <IApplyStateFilter> filters) { using (var transaction = context.Connection.CreateWriteTransaction()) { foreach (var handler in _handlers.GetHandlers(context.OldStateName)) { handler.Unapply(context, transaction); } foreach (var filter in filters) { filter.OnStateUnapplied(context, transaction); } transaction.SetJobState(context.JobId, context.NewState); foreach (var handler in _handlers.GetHandlers(context.NewState.Name)) { handler.Apply(context, transaction); } foreach (var filter in filters) { filter.OnStateApplied(context, transaction); } if (context.NewState.IsFinal) { transaction.ExpireJob(context.JobId, context.JobExpirationTimeout); } else { transaction.PersistJob(context.JobId); } transaction.Commit(); } }