public ContextManagerNested(ContextControllerFactoryServiceContext factoryServiceContext) { _contextName = factoryServiceContext.ContextName; _servicesContext = factoryServiceContext.ServicesContext; _contextPartitionIdManager = factoryServiceContext.AgentInstanceContextCreate.StatementContext.ContextControllerFactoryService.AllocatePartitionIdMgr( _contextName, factoryServiceContext.AgentInstanceContextCreate.StatementContext.StatementId); _nestedContextFactories = factoryServiceContext.AgentInstanceContextCreate.StatementContext.ContextControllerFactoryService.GetFactory( factoryServiceContext); StatementAIResourceRegistryFactory resourceRegistryFactory = () => new StatementAIResourceRegistry(new AIRegistryAggregationMap(), new AIRegistryExprMap()); var contextProps = ContextPropertyEventType.GetNestedTypeBase(); foreach (var factory in _nestedContextFactories) { contextProps.Put(factory.FactoryContext.ContextName, factory.ContextBuiltinProps); } var contextPropsType = _servicesContext.EventAdapterService.CreateAnonymousMapType( _contextName, contextProps, true); var registry = new ContextPropertyRegistryImpl( Collections.GetEmptyList <ContextDetailPartitionItem>(), contextPropsType); _contextDescriptor = new ContextDescriptor( _contextName, false, registry, resourceRegistryFactory, this, factoryServiceContext.Detail); }
public ContextManager Make(ContextDetail contextDetail, ContextControllerFactoryServiceContext factoryServiceContext) { if (contextDetail is ContextDetailNested) { return(new ContextManagerNested(factoryServiceContext)); } return(new ContextManagerImpl(factoryServiceContext)); }
private static ContextControllerFactory BuildContextFactory( ContextControllerFactoryServiceContext serviceContext, String contextName, ContextDetail detail, int nestingLevel, IList <FilterSpecCompiled> optFiltersNested, ContextStateCache contextStateCache) { var factoryContext = new ContextControllerFactoryContext( serviceContext.ContextName, contextName, serviceContext.ServicesContext, serviceContext.AgentInstanceContextCreate, nestingLevel, serviceContext.IsRecoveringResilient); return(BuildContextFactory(factoryContext, detail, optFiltersNested, contextStateCache)); }
public static ContextControllerFactory[] GetFactory(ContextControllerFactoryServiceContext serviceContext, ContextStateCache contextStateCache) { if (!(serviceContext.Detail is ContextDetailNested)) { ContextControllerFactory factory = BuildContextFactory( serviceContext, serviceContext.ContextName, serviceContext.Detail, 1, null, contextStateCache); factory.ValidateFactory(); return(new ContextControllerFactory[] { factory }); } return(BuildNestedContextFactories(serviceContext, contextStateCache)); }
public ContextManagerImpl(ContextControllerFactoryServiceContext factoryServiceContext) { _uLock = LockManager.CreateLock(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); _contextName = factoryServiceContext.ContextName; _servicesContext = factoryServiceContext.ServicesContext; _factory = factoryServiceContext.AgentInstanceContextCreate.StatementContext.ContextControllerFactoryService.GetFactory(factoryServiceContext)[0]; _rootContext = _factory.CreateNoCallback(0, this); // single instance: created here and activated/deactivated later _contextPartitionIdManager = factoryServiceContext.AgentInstanceContextCreate.StatementContext.ContextControllerFactoryService.AllocatePartitionIdMgr(_contextName, factoryServiceContext.AgentInstanceContextCreate.StatementContext.StatementId); var resourceRegistryFactory = _factory.StatementAIResourceRegistryFactory; var contextProps = _factory.ContextBuiltinProps; var contextPropsType = _servicesContext.EventAdapterService.CreateAnonymousMapType(_contextName, contextProps, true); var registry = new ContextPropertyRegistryImpl(_factory.ContextDetailPartitionItems, contextPropsType); _contextDescriptor = new ContextDescriptor(_contextName, _factory.IsSingleInstanceContext, registry, resourceRegistryFactory, this, _factory.ContextDetail); }
public void AddContextSpec(EPServicesContext servicesContext, AgentInstanceContext agentInstanceContext, CreateContextDesc contextDesc, bool isRecoveringResilient, EventType statementResultEventType) { var mgr = _contexts.Get(contextDesc.ContextName); if (mgr != null) { if (_destroyedContexts.Contains(contextDesc.ContextName)) { throw new ExprValidationException("Context by name '" + contextDesc.ContextName + "' is still referenced by statements and may not be changed"); } throw new ExprValidationException("Context by name '" + contextDesc.ContextName + "' already exists"); } var factoryServiceContext = new ContextControllerFactoryServiceContext(contextDesc.ContextName, servicesContext, contextDesc.ContextDetail, agentInstanceContext, isRecoveringResilient, statementResultEventType); var contextManager = servicesContext.ContextManagerFactoryService.Make(contextDesc.ContextDetail, factoryServiceContext); factoryServiceContext.AgentInstanceContextCreate.EpStatementAgentInstanceHandle.FilterFaultHandler = contextManager; _contexts.Put(contextDesc.ContextName, new ContextManagerEntry(contextManager)); }
private static ContextControllerFactory[] BuildNestedContextFactories( ContextControllerFactoryServiceContext serviceContext, ContextStateCache contextStateCache) { var nestedSpec = (ContextDetailNested)serviceContext.Detail; // determine nested filter use IDictionary <CreateContextDesc, IList <FilterSpecCompiled> > filtersPerNestedContext = null; for (int i = 0; i < nestedSpec.Contexts.Count; i++) { CreateContextDesc contextParent = nestedSpec.Contexts[i]; for (int j = i + 1; j < nestedSpec.Contexts.Count; j++) { CreateContextDesc contextControlled = nestedSpec.Contexts[j]; IList <FilterSpecCompiled> specs = contextControlled.FilterSpecs; if (specs == null) { continue; } if (filtersPerNestedContext == null) { filtersPerNestedContext = new Dictionary <CreateContextDesc, IList <FilterSpecCompiled> >(); } IList <FilterSpecCompiled> existing = filtersPerNestedContext.Get(contextParent); if (existing != null) { existing.AddAll(specs); } else { filtersPerNestedContext.Put(contextParent, specs); } } } // create contexts ICollection <String> namesUsed = new HashSet <String>(); var hierarchy = new ContextControllerFactory[nestedSpec.Contexts.Count]; for (int i = 0; i < nestedSpec.Contexts.Count; i++) { CreateContextDesc context = nestedSpec.Contexts[i]; if (namesUsed.Contains(context.ContextName)) { throw new ExprValidationException( "Context by name '" + context.ContextName + "' has already been declared within nested context '" + serviceContext.ContextName + "'"); } namesUsed.Add(context.ContextName); int nestingLevel = i + 1; IList <FilterSpecCompiled> optFiltersNested = null; if (filtersPerNestedContext != null) { optFiltersNested = filtersPerNestedContext.Get(context); } hierarchy[i] = BuildContextFactory( serviceContext, context.ContextName, context.ContextDetail, nestingLevel, optFiltersNested, contextStateCache); hierarchy[i].ValidateFactory(); } return(hierarchy); }