public void Activate(EventBean optionalTriggeringEvent, IDictionary <String, Object> optionalTriggeringPattern, ContextControllerState controllerState, ContextInternalFilterAddendum filterAddendum, int?importPathId) { var factoryContext = _factory.FactoryContext; _activationFilterAddendum = filterAddendum; foreach (var item in _factory.SegmentedSpec.Items) { var callback = new ContextControllerPartitionedFilterCallback(factoryContext.ServicesContext, factoryContext.AgentInstanceContextCreate, item, this, filterAddendum); _filterCallbacks.Add(callback); if (optionalTriggeringEvent != null) { var match = StatementAgentInstanceUtil.EvaluateFilterForStatement(factoryContext.ServicesContext, optionalTriggeringEvent, factoryContext.AgentInstanceContextCreate, callback.FilterHandle); if (match) { callback.MatchFound(optionalTriggeringEvent, null); } } } if (factoryContext.NestingLevel == 1) { controllerState = ContextControllerStateUtil.GetRecoveryStates(_factory.FactoryContext.StateCache, factoryContext.OutermostContextName); } if (controllerState == null) { return; } int?pathIdToUse = importPathId ?? _pathId; InitializeFromState(optionalTriggeringEvent, optionalTriggeringPattern, filterAddendum, controllerState, pathIdToUse.Value, null, false); }
public void Activate(EventBean optionalTriggeringEvent, IDictionary <String, Object> optionalTriggeringPattern, ContextControllerState controllerState, ContextInternalFilterAddendum activationFilterAddendum, int?importPathId) { ContextControllerFactoryContext factoryContext = _factory.FactoryContext; _activationFilterAddendum = activationFilterAddendum; if (factoryContext.NestingLevel == 1) { controllerState = ContextControllerStateUtil.GetRecoveryStates(_factory.FactoryContext.StateCache, factoryContext.OutermostContextName); } if (controllerState == null) { // handle preallocate if (_factory.HashedSpec.IsPreallocate) { for (int i = 0; i < _factory.HashedSpec.Granularity; i++) { var properties = ContextPropertyEventType.GetHashBean(factoryContext.ContextName, i); _currentSubpathId++; // merge filter addendum, if any var filterAddendumToUse = activationFilterAddendum; if (_factory.HasFiltersSpecsNestedContexts) { filterAddendumToUse = activationFilterAddendum != null?activationFilterAddendum.DeepCopy() : new ContextInternalFilterAddendum(); _factory.PopulateContextInternalFilterAddendums(filterAddendumToUse, i); } ContextControllerInstanceHandle handle = _activationCallback.ContextPartitionInstantiate(null, _currentSubpathId, null, this, optionalTriggeringEvent, null, i, properties, controllerState, filterAddendumToUse, _factory.FactoryContext.IsRecoveringResilient, ContextPartitionState.STARTED); _partitionKeys.Put(i, handle); _factory.FactoryContext.StateCache.AddContextPath( _factory.FactoryContext.OutermostContextName, _factory.FactoryContext.NestingLevel, _pathId, _currentSubpathId, handle.ContextPartitionOrPathId, i, _factory.Binding); } return; } // start filters if not preallocated ActivateFilters(optionalTriggeringEvent); return; } // initialize from existing state int pathIdToUse = importPathId ?? _pathId; InitializeFromState(optionalTriggeringEvent, optionalTriggeringPattern, controllerState, pathIdToUse, null, false); // activate filters if (!_factory.HashedSpec.IsPreallocate) { ActivateFilters(null); } }
public void Activate( EventBean optionalTriggeringEvent, IDictionary <String, Object> optionalTriggeringPattern, ContextControllerState controllerState, ContextInternalFilterAddendum activationFilterAddendum, int?importPathId) { if (Factory.FactoryContext.NestingLevel == 1) { controllerState = ContextControllerStateUtil.GetRecoveryStates( Factory.StateCache, Factory.FactoryContext.OutermostContextName); } if (controllerState == null) { var count = 0; foreach (var category in _factory.CategorySpec.Items) { var context = ContextPropertyEventType.GetCategorizedBean( Factory.FactoryContext.ContextName, 0, category.Name); _currentSubpathId++; // merge filter addendum, if any var filterAddendumToUse = activationFilterAddendum; if (_factory.HasFiltersSpecsNestedContexts()) { filterAddendumToUse = activationFilterAddendum != null ? activationFilterAddendum.DeepCopy() : new ContextInternalFilterAddendum(); _factory.PopulateContextInternalFilterAddendums(filterAddendumToUse, count); } var handle = _activationCallback.ContextPartitionInstantiate( null, _currentSubpathId, null, this, optionalTriggeringEvent, optionalTriggeringPattern, count, context, controllerState, filterAddendumToUse, Factory.FactoryContext.IsRecoveringResilient, ContextPartitionState.STARTED); _handleCategories.Put(count, handle); Factory.StateCache.AddContextPath( Factory.FactoryContext.OutermostContextName, Factory.FactoryContext.NestingLevel, PathId, _currentSubpathId, handle.ContextPartitionOrPathId, count, _factory.Binding); count++; } return; } var pathIdToUse = importPathId != null ? importPathId.Value : PathId; InitializeFromState( optionalTriggeringEvent, optionalTriggeringPattern, activationFilterAddendum, controllerState, pathIdToUse, null); }
public void Activate(EventBean optionalTriggeringEvent, IDictionary <String, Object> optionalTriggeringPattern, ContextControllerState controllerState, ContextInternalFilterAddendum filterAddendum, int?importPathId) { if (_factory.FactoryContext.NestingLevel == 1) { controllerState = ContextControllerStateUtil.GetRecoveryStates(_factory.FactoryContext.StateCache, _factory.FactoryContext.OutermostContextName); } bool currentlyRunning; var contextDetailInitiatedTerminated = _factory.ContextDetailInitiatedTerminated; if (controllerState == null) { StartCondition = MakeEndpoint(contextDetailInitiatedTerminated.Start, filterAddendum, true, 0); // if this is single-instance mode, check if we are currently running according to schedule currentlyRunning = StartCondition.IsImmediate; if (!contextDetailInitiatedTerminated.IsOverlapping) { currentlyRunning = DetermineCurrentlyRunning(StartCondition); } if (currentlyRunning) { CurrentSubpathId++; var endEndpoint = MakeEndpoint(contextDetailInitiatedTerminated.End, filterAddendum, false, CurrentSubpathId); endEndpoint.Activate(optionalTriggeringEvent, null, 0, _factory.FactoryContext.IsRecoveringResilient); var startTime = _factory.SchedulingService.Time; var endTime = endEndpoint.ExpectedEndTime; var builtinProps = GetBuiltinProperties(_factory.FactoryContext.ContextName, startTime, endTime, Collections.GetEmptyMap <string, object>()); var instanceHandle = ActivationCallback.ContextPartitionInstantiate(null, CurrentSubpathId, null, this, optionalTriggeringEvent, optionalTriggeringPattern, null, builtinProps, controllerState, filterAddendum, _factory.FactoryContext.IsRecoveringResilient, ContextPartitionState.STARTED); EndConditions.Put(endEndpoint, new ContextControllerInitTermInstance(instanceHandle, null, startTime, endTime, CurrentSubpathId)); var state = new ContextControllerInitTermState(_factory.FactoryContext.ServicesContext.SchedulingService.Time, builtinProps); _factory.FactoryContext.StateCache.AddContextPath(_factory.FactoryContext.OutermostContextName, _factory.FactoryContext.NestingLevel, _pathId, CurrentSubpathId, instanceHandle.ContextPartitionOrPathId, state, _factory.Binding); } // non-overlapping and not currently running, or overlapping if ((!contextDetailInitiatedTerminated.IsOverlapping && !currentlyRunning) || contextDetailInitiatedTerminated.IsOverlapping) { StartCondition.Activate(optionalTriggeringEvent, null, 0, _factory.FactoryContext.IsRecoveringResilient); } return; } StartCondition = MakeEndpoint(contextDetailInitiatedTerminated.Start, filterAddendum, true, 0); // if this is single-instance mode, check if we are currently running according to schedule currentlyRunning = false; if (!contextDetailInitiatedTerminated.IsOverlapping) { currentlyRunning = DetermineCurrentlyRunning(StartCondition); } if (!currentlyRunning) { StartCondition.Activate(optionalTriggeringEvent, null, 0, _factory.FactoryContext.IsRecoveringResilient); } int pathIdToUse = importPathId ?? _pathId; InitializeFromState(optionalTriggeringEvent, optionalTriggeringPattern, filterAddendum, controllerState, pathIdToUse, null, false); }