internal static Pair <Type, T> ResolveFromLocalAndPath <T>(
            string soughtName,
            ClassProvidedCompileTimeRegistry locals,
            PathRegistry <string, ClassProvided> path,
            string objectName,
            ICollection <string> moduleUses,
            ModuleDependenciesCompileTime moduleDependencies,
            Func <T, ISet <string> > namesProvider)
            where T : Attribute
        {
            if (locals.Classes.IsEmpty() && path.IsEmpty())
            {
                return(null);
            }

            var annotationType = typeof(T);

            try {
                // try resolve from local
                var localPair = ResolveFromLocal(soughtName, locals, annotationType, objectName, namesProvider);
                if (localPair != null)
                {
                    return(localPair);
                }

                // try resolve from path, using module-uses when necessary
                return(ResolveFromPath(soughtName, path, annotationType, objectName, moduleUses, moduleDependencies, namesProvider));
            }
            catch (ExprValidationException ex) {
                throw new EPException(ex.Message, ex);
            }
        }
Exemple #2
0
 public ExprDeclaredCompileTimeResolverImpl(
     string moduleName,
     ICollection<string> moduleUses,
     ExprDeclaredCompileTimeRegistry locals,
     PathRegistry<string, ExpressionDeclItem> path,
     ModuleDependenciesCompileTime moduleDependencies)
 {
     this.moduleName = moduleName;
     this.moduleUses = moduleUses;
     this.locals = locals;
     this.path = path;
     this.moduleDependencies = moduleDependencies;
 }
 public ClassProvidedCompileTimeResolverImpl(
     string moduleName,
     ICollection <string> moduleUses,
     ClassProvidedCompileTimeRegistry locals,
     PathRegistry <string, ClassProvided> path,
     ModuleDependenciesCompileTime moduleDependencies,
     bool isFireAndForget)
 {
     this._moduleName         = moduleName;
     this._moduleUses         = moduleUses;
     this._locals             = locals;
     this._path               = path;
     this._moduleDependencies = moduleDependencies;
     this._isFireAndForget    = isFireAndForget;
 }
Exemple #4
0
 public ScriptCompileTimeResolverImpl(
     string moduleName,
     ICollection<string> moduleUses,
     ScriptCompileTimeRegistry locals,
     PathRegistry<NameAndParamNum, ExpressionScriptProvided> path,
     ModuleDependenciesCompileTime moduleDependencies,
     bool isFireAndForget)
 {
     this._moduleName = moduleName;
     this._moduleUses = moduleUses;
     this._locals = locals;
     this._path = path;
     this._moduleDependencies = moduleDependencies;
     _isFireAndForget = isFireAndForget;
 }
Exemple #5
0
 public ExprDeclaredCompileTimeResolverImpl(
     string moduleName,
     ICollection<string> moduleUses,
     ExprDeclaredCompileTimeRegistry locals,
     PathRegistry<string, ExpressionDeclItem> path,
     ModuleDependenciesCompileTime moduleDependencies,
     bool isFireAndForget)
 {
     this._moduleName = moduleName;
     this._moduleUses = moduleUses;
     this._locals = locals;
     this._path = path;
     this._moduleDependencies = moduleDependencies;
     this._isFireAndForget = isFireAndForget;
 }
 public ContextCompileTimeResolverImpl(
     string moduleName,
     ICollection<string> moduleUses,
     ContextCompileTimeRegistry locals,
     PathRegistry<string, ContextMetaData> path,
     ModuleDependenciesCompileTime moduleDependencies,
     bool isFireAndForget)
 {
     this.moduleName = moduleName;
     this.moduleUses = moduleUses;
     this.locals = locals;
     this.path = path;
     this.moduleDependencies = moduleDependencies;
     this.isFireAndForget = isFireAndForget;
 }
 public TableCompileTimeResolverImpl(
     string moduleName,
     ICollection<string> moduleUses,
     TableCompileTimeRegistry compileTimeRegistry,
     PathRegistry<string, TableMetaData> pathTables,
     ModuleDependenciesCompileTime moduleDependencies,
     bool isFireAndForget)
 {
     this.moduleName = moduleName;
     this.moduleUses = moduleUses;
     this.compileTimeRegistry = compileTimeRegistry;
     this.pathTables = pathTables;
     this.moduleDependencies = moduleDependencies;
     this.isFireAndForget = isFireAndForget;
 }
 public VariableCompileTimeResolverImpl(
     string moduleName,
     ICollection<string> moduleUses,
     VariableRepositoryPreconfigured publicVariables,
     VariableCompileTimeRegistry compileTimeRegistry,
     PathRegistry<string, VariableMetaData> pathVariables,
     ModuleDependenciesCompileTime moduleDependencies,
     bool isFireAndForget)
 {
     _moduleName = moduleName;
     _moduleUses = moduleUses;
     _publicVariables = publicVariables;
     _compileTimeRegistry = compileTimeRegistry;
     _pathVariables = pathVariables;
     _moduleDependencies = moduleDependencies;
     _isFireAndForget = isFireAndForget;
 }
Exemple #9
0
 public EventTypeCompileTimeResolver(
     string moduleName,
     ICollection<string> moduleUses,
     EventTypeCompileTimeRegistry locals,
     EventTypeRepositoryImpl publics,
     PathRegistry<string, EventType> path,
     ModuleDependenciesCompileTime moduleDependencies,
     bool isFireAndForget)
 {
     this.moduleName = moduleName;
     this.moduleUses = moduleUses;
     this.locals = locals;
     this.publics = publics;
     Path = path;
     this.moduleDependencies = moduleDependencies;
     this.isFireAndForget = isFireAndForget;
 }
        private static Pair <Type, T> ResolveFromPath <T>(
            string soughtName,
            PathRegistry <string, ClassProvided> path,
            Type annotationType,
            string objectName,
            ICollection <string> moduleUses,
            ModuleDependenciesCompileTime moduleDependencies,
            Func <T, ISet <string> > namesProvider)
            where T : Attribute
        {
            // TBD: Verify that annotationType is derived from T
            if (!typeof(T).IsAssignableFrom(annotationType))
            {
                throw new ArgumentException("cannot assign annotationType from " + typeof(T).FullName);
            }

            IList <PathFunc <T> > foundPath = new List <PathFunc <T> >();

            path.TraverseWithModule((moduleName, classProvided) => {
                EPTypeHelper.TraverseAnnotations <T>(
                    classProvided.ClassesMayNull,
                    (
                        clazz,
                        annotation) => {
                    var t     = annotation;
                    var names = namesProvider.Invoke(t);
                    foreach (var name in names)
                    {
                        if (soughtName.Equals(name))
                        {
                            foundPath.Add(new PathFunc <T>(moduleName, clazz, t));
                        }
                    }
                });
            });

            PathFunc <T> foundPathFunc;

            if (foundPath.IsEmpty())
            {
                return(null);
            }
            else if (foundPath.Count == 1)
            {
                foundPathFunc = foundPath[0];
            }
            else
            {
                if (moduleUses == null || moduleUses.IsEmpty())
                {
                    throw GetDuplicateSingleRow(soughtName, objectName);
                }

                IList <PathFunc <T> > matchesUses = new List <PathFunc <T> >(2);
                foreach (var func in foundPath)
                {
                    if (moduleUses.Contains(func.OptionalModuleName))
                    {
                        matchesUses.Add(func);
                    }
                }

                if (matchesUses.Count > 1)
                {
                    throw GetDuplicateSingleRow(soughtName, objectName);
                }

                if (matchesUses.IsEmpty())
                {
                    return(null);
                }

                foundPathFunc = matchesUses[0];
            }

            moduleDependencies.AddPathClass(foundPathFunc.Clazz.FullName, foundPathFunc.OptionalModuleName);
            return(new Pair <Type, T>(foundPathFunc.Clazz, foundPathFunc.Annotation));
        }
Exemple #11
0
        public ModuleCompileTimeServices(
            IContainer container,
            CompilerServices compilerServices,
            Configuration configuration,
            ContextCompileTimeRegistry contextCompileTimeRegistry,
            ContextCompileTimeResolver contextCompileTimeResolver,
            BeanEventTypeStemService beanEventTypeStemService,
            BeanEventTypeFactoryPrivate beanEventTypeFactoryPrivate,
            ClassProvidedCompileTimeRegistry classProvidedCompileTimeRegistry,
            ClassProvidedCompileTimeResolver classProvidedCompileTimeResolver,
            DatabaseConfigServiceCompileTime databaseConfigServiceCompileTime,
            ImportServiceCompileTime importService,
            ExprDeclaredCompileTimeRegistry exprDeclaredCompileTimeRegistry,
            ExprDeclaredCompileTimeResolver exprDeclaredCompileTimeResolver,
            EventTypeAvroHandler eventTypeAvroHandler,
            EventTypeCompileTimeRegistry eventTypeCompileTimeRegistry,
            EventTypeCompileTimeResolver eventTypeCompileTimeResolver,
            EventTypeRepositoryImpl eventTypeRepositoryPreconfigured,
            bool fireAndForget,
            IndexCompileTimeRegistry indexCompileTimeRegistry,
            ModuleDependenciesCompileTime moduleDependencies,
            ModuleAccessModifierService moduleVisibilityRules,
            NamedWindowCompileTimeResolver namedWindowCompileTimeResolver,
            NamedWindowCompileTimeRegistry namedWindowCompileTimeRegistry,
            ParentClassLoader parentClassLoader,
            PatternObjectResolutionService patternObjectResolutionService,
            ScriptCompileTimeRegistry scriptCompileTimeRegistry,
            ScriptCompileTimeResolver scriptCompileTimeResolver,
            ScriptCompiler scriptCompiler,
            SerdeEventTypeCompileTimeRegistry serdeEventTypeRegistry,
            SerdeCompileTimeResolver serdeResolver, 
            TableCompileTimeRegistry tableCompileTimeRegistry,
            TableCompileTimeResolver tableCompileTimeResolver,
            VariableCompileTimeRegistry variableCompileTimeRegistry,
            VariableCompileTimeResolver variableCompileTimeResolver,
            ViewResolutionService viewResolutionService,
            XMLFragmentEventTypeFactory xmlFragmentEventTypeFactory)
        {
            var generation = Interlocked.Increment(ref _generation);
            
            Namespace = $"generation_{generation}";

            Container = container;
            CompilerServices = compilerServices;
            Configuration = configuration;
            ContextCompileTimeRegistry = contextCompileTimeRegistry;
            ContextCompileTimeResolver = contextCompileTimeResolver;
            BeanEventTypeStemService = beanEventTypeStemService;
            BeanEventTypeFactoryPrivate = beanEventTypeFactoryPrivate;
            DatabaseConfigServiceCompileTime = databaseConfigServiceCompileTime;
            ImportServiceCompileTime = importService;
            ExprDeclaredCompileTimeRegistry = exprDeclaredCompileTimeRegistry;
            ExprDeclaredCompileTimeResolver = exprDeclaredCompileTimeResolver;
            EventTypeAvroHandler = eventTypeAvroHandler;
            EventTypeCompileTimeRegistry = eventTypeCompileTimeRegistry;
            EventTypeCompileTimeResolver = eventTypeCompileTimeResolver;
            EventTypeRepositoryPreconfigured = eventTypeRepositoryPreconfigured;
            IndexCompileTimeRegistry = indexCompileTimeRegistry;
            ModuleDependencies = moduleDependencies;
            ModuleVisibilityRules = moduleVisibilityRules;
            NamedWindowCompileTimeResolver = namedWindowCompileTimeResolver;
            NamedWindowCompileTimeRegistry = namedWindowCompileTimeRegistry;
            ParentClassLoader = parentClassLoader;
            PatternObjectResolutionService = patternObjectResolutionService;
            ScriptCompileTimeRegistry = scriptCompileTimeRegistry;
            ScriptCompileTimeResolver = scriptCompileTimeResolver;
            ScriptCompiler = scriptCompiler;
            TableCompileTimeRegistry = tableCompileTimeRegistry;
            TableCompileTimeResolver = tableCompileTimeResolver;
            VariableCompileTimeRegistry = variableCompileTimeRegistry;
            VariableCompileTimeResolver = variableCompileTimeResolver;
            ViewResolutionService = viewResolutionService;
            XmlFragmentEventTypeFactory = xmlFragmentEventTypeFactory;

            #region ESPER_8.5.1
            ClassProvidedCompileTimeRegistry = classProvidedCompileTimeRegistry;
            ClassProvidedCompileTimeResolver = classProvidedCompileTimeResolver;
            SerdeEventTypeRegistry = serdeEventTypeRegistry;
            SerdeResolver = serdeResolver;
            IsFireAndForget = fireAndForget;
            #endregion
        }
Exemple #12
0
 public ModuleCompileTimeServices(
     IContainer container,
     CompilerServices compilerServices,
     Configuration configuration,
     ContextCompileTimeRegistry contextCompileTimeRegistry,
     ContextCompileTimeResolver contextCompileTimeResolver,
     BeanEventTypeStemService beanEventTypeStemService,
     BeanEventTypeFactoryPrivate beanEventTypeFactoryPrivate,
     DatabaseConfigServiceCompileTime databaseConfigServiceCompileTime,
     ImportServiceCompileTime importService,
     ExprDeclaredCompileTimeRegistry exprDeclaredCompileTimeRegistry,
     ExprDeclaredCompileTimeResolver exprDeclaredCompileTimeResolver,
     EventTypeAvroHandler eventTypeAvroHandler,
     EventTypeCompileTimeRegistry eventTypeCompileTimeRegistry,
     EventTypeCompileTimeResolver eventTypeCompileTimeResolver,
     EventTypeRepositoryImpl eventTypeRepositoryPreconfigured,
     IndexCompileTimeRegistry indexCompileTimeRegistry,
     ModuleDependenciesCompileTime moduleDependencies,
     ModuleAccessModifierService moduleVisibilityRules,
     NamedWindowCompileTimeResolver namedWindowCompileTimeResolver,
     NamedWindowCompileTimeRegistry namedWindowCompileTimeRegistry,
     PatternObjectResolutionService patternObjectResolutionService,
     ScriptCompileTimeRegistry scriptCompileTimeRegistry,
     ScriptCompileTimeResolver scriptCompileTimeResolver,
     ScriptServiceCompileTime scriptServiceCompileTime,
     TableCompileTimeRegistry tableCompileTimeRegistry,
     TableCompileTimeResolver tableCompileTimeResolver,
     VariableCompileTimeRegistry variableCompileTimeRegistry,
     VariableCompileTimeResolver variableCompileTimeResolver,
     ViewResolutionService viewResolutionService,
     XMLFragmentEventTypeFactory xmlFragmentEventTypeFactory)
 {
     Container = container;
     CompilerServices = compilerServices;
     Configuration = configuration;
     ContextCompileTimeRegistry = contextCompileTimeRegistry;
     ContextCompileTimeResolver = contextCompileTimeResolver;
     BeanEventTypeStemService = beanEventTypeStemService;
     BeanEventTypeFactoryPrivate = beanEventTypeFactoryPrivate;
     DatabaseConfigServiceCompileTime = databaseConfigServiceCompileTime;
     ImportServiceCompileTime = importService;
     ExprDeclaredCompileTimeRegistry = exprDeclaredCompileTimeRegistry;
     ExprDeclaredCompileTimeResolver = exprDeclaredCompileTimeResolver;
     EventTypeAvroHandler = eventTypeAvroHandler;
     EventTypeCompileTimeRegistry = eventTypeCompileTimeRegistry;
     EventTypeCompileTimeResolver = eventTypeCompileTimeResolver;
     EventTypeRepositoryPreconfigured = eventTypeRepositoryPreconfigured;
     IndexCompileTimeRegistry = indexCompileTimeRegistry;
     ModuleDependencies = moduleDependencies;
     ModuleVisibilityRules = moduleVisibilityRules;
     NamedWindowCompileTimeResolver = namedWindowCompileTimeResolver;
     NamedWindowCompileTimeRegistry = namedWindowCompileTimeRegistry;
     PatternObjectResolutionService = patternObjectResolutionService;
     ScriptServiceCompileTime = scriptServiceCompileTime;
     ScriptCompileTimeRegistry = scriptCompileTimeRegistry;
     ScriptCompileTimeResolver = scriptCompileTimeResolver;
     TableCompileTimeRegistry = tableCompileTimeRegistry;
     TableCompileTimeResolver = tableCompileTimeResolver;
     VariableCompileTimeRegistry = variableCompileTimeRegistry;
     VariableCompileTimeResolver = variableCompileTimeResolver;
     ViewResolutionService = viewResolutionService;
     XmlFragmentEventTypeFactory = xmlFragmentEventTypeFactory;
 }
        private static ModuleCompileTimeServices GetServices(
            CompilerArguments arguments,
            string moduleName,
            ICollection<string> moduleUses,
            bool isFireAndForget)
        {
            var configuration = arguments.Configuration;
            var path = arguments.Path;
            var options = arguments.Options;
            
            // script
            var scriptCompiler = MakeScriptCompiler(configuration);

            // imports
            var importServiceCompileTime = MakeImportService(configuration);
            var classLoaderParent = new ParentClassLoader(importServiceCompileTime.ClassLoader);
            var container = importServiceCompileTime.Container;

            // resolve pre-configured bean event types, make bean-stem service
            var resolvedBeanEventTypes = BeanEventTypeRepoUtil.ResolveBeanEventTypes(
                configuration.Common.EventTypeNames,
                importServiceCompileTime);
            var beanEventTypeStemService = BeanEventTypeRepoUtil.MakeBeanEventTypeStemService(
                configuration,
                resolvedBeanEventTypes,
                EventBeanTypedEventFactoryCompileTime.INSTANCE);

            // allocate repositories
            var eventTypeRepositoryPreconfigured = new EventTypeRepositoryImpl(true);
            var eventTypeCompileRegistry = new EventTypeCompileTimeRegistry(eventTypeRepositoryPreconfigured);
            var beanEventTypeFactoryPrivate = new BeanEventTypeFactoryPrivate(
                EventBeanTypedEventFactoryCompileTime.INSTANCE, EventTypeFactoryImpl.GetInstance(container), beanEventTypeStemService);
            var variableRepositoryPreconfigured = new VariableRepositoryPreconfigured();

            // allocate path registries
            var pathEventTypes = new PathRegistry<string, EventType>(PathRegistryObjectType.EVENTTYPE);
            var pathNamedWindows = new PathRegistry<string, NamedWindowMetaData>(PathRegistryObjectType.NAMEDWINDOW);
            var pathTables = new PathRegistry<string, TableMetaData>(PathRegistryObjectType.TABLE);
            var pathContexts = new PathRegistry<string, ContextMetaData>(PathRegistryObjectType.CONTEXT);
            var pathVariables = new PathRegistry<string, VariableMetaData>(PathRegistryObjectType.VARIABLE);
            var pathExprDeclared = new PathRegistry<string, ExpressionDeclItem>(PathRegistryObjectType.EXPRDECL);
            var pathScript = new PathRegistry<NameAndParamNum, ExpressionScriptProvided>(PathRegistryObjectType.SCRIPT);
            var pathClassProvided = new PathRegistry<string, ClassProvided>(PathRegistryObjectType.CLASSPROVIDED);

            // add runtime-path which is the information an existing runtime may have
            if (path.CompilerPathables != null) {
                foreach (EPCompilerPathable pathable in path.CompilerPathables) {
                    EPCompilerPathableImpl impl = (EPCompilerPathableImpl) pathable;
                    pathVariables.MergeFrom(impl.VariablePathRegistry);
                    pathEventTypes.MergeFrom(impl.EventTypePathRegistry);
                    pathExprDeclared.MergeFrom(impl.ExprDeclaredPathRegistry);
                    pathNamedWindows.MergeFrom(impl.NamedWindowPathRegistry);
                    pathTables.MergeFrom(impl.TablePathRegistry);
                    pathContexts.MergeFrom(impl.ContextPathRegistry);
                    pathScript.MergeFrom(impl.ScriptPathRegistry);
                    pathClassProvided.MergeFrom(impl.ClassProvidedPathRegistry);
                    eventTypeRepositoryPreconfigured.MergeFrom(impl.EventTypePreconfigured);
                    variableRepositoryPreconfigured.MergeFrom(impl.VariablePreconfigured);

                    JsonEventTypeUtility.AddJsonUnderlyingClass(pathEventTypes, classLoaderParent);
                }
            }
            
            // build preconfigured type system
            EventTypeRepositoryBeanTypeUtil.BuildBeanTypes(
                beanEventTypeStemService,
                eventTypeRepositoryPreconfigured,
                resolvedBeanEventTypes,
                beanEventTypeFactoryPrivate,
                configuration.Common.EventTypesBean);
            EventTypeRepositoryMapTypeUtil.BuildMapTypes(
                eventTypeRepositoryPreconfigured,
                configuration.Common.MapTypeConfigurations,
                configuration.Common.EventTypesMapEvents,
                configuration.Common.EventTypesNestableMapEvents,
                beanEventTypeFactoryPrivate,
                importServiceCompileTime);
            EventTypeRepositoryOATypeUtil.BuildOATypes(
                eventTypeRepositoryPreconfigured,
                configuration.Common.ObjectArrayTypeConfigurations,
                configuration.Common.EventTypesNestableObjectArrayEvents,
                beanEventTypeFactoryPrivate,
                importServiceCompileTime);
            XMLFragmentEventTypeFactory xmlFragmentEventTypeFactory = new XMLFragmentEventTypeFactory(
                beanEventTypeFactoryPrivate,
                eventTypeCompileRegistry,
                eventTypeRepositoryPreconfigured);
            EventTypeRepositoryXMLTypeUtil.BuildXMLTypes(
                eventTypeRepositoryPreconfigured,
                configuration.Common.EventTypesXMLDOM,
                beanEventTypeFactoryPrivate,
                xmlFragmentEventTypeFactory,
                container.ResourceManager());
            EventTypeAvroHandler eventTypeAvroHandler = EventTypeAvroHandlerFactory.Resolve(
                importServiceCompileTime,
                configuration.Common.EventMeta.AvroSettings,
                EventTypeAvroHandlerConstants.COMPILE_TIME_HANDLER_IMPL);
            EventTypeRepositoryAvroTypeUtil.BuildAvroTypes(
                eventTypeRepositoryPreconfigured,
                configuration.Common.EventTypesAvro,
                eventTypeAvroHandler,
                beanEventTypeFactoryPrivate.EventBeanTypedEventFactory);
            EventTypeRepositoryVariantStreamUtil.BuildVariantStreams(
                eventTypeRepositoryPreconfigured,
                configuration.Common.VariantStreams,
                EventTypeFactoryImpl.GetInstance(container));

            // build preconfigured variables
            VariableUtil.ConfigureVariables(
                variableRepositoryPreconfigured,
                configuration.Common.Variables,
                importServiceCompileTime,
                EventBeanTypedEventFactoryCompileTime.INSTANCE,
                eventTypeRepositoryPreconfigured,
                beanEventTypeFactoryPrivate);

            var deploymentNumber = -1;

            foreach (var unit in path.Compileds) {
                deploymentNumber++;
                var provider = ModuleProviderUtil.Analyze(unit, classLoaderParent, pathClassProvided);
                var unitModuleName = provider.ModuleProvider.ModuleName;

                // initialize event types
                var moduleTypes = new Dictionary<string, EventType>();
                var eventTypeResolver = new EventTypeResolverImpl(
                    moduleTypes,
                    pathEventTypes,
                    eventTypeRepositoryPreconfigured,
                    beanEventTypeFactoryPrivate,
                    EventSerdeFactoryDefault.INSTANCE);
                var eventTypeCollector = new EventTypeCollectorImpl(
                    container,
                    moduleTypes,
                    beanEventTypeFactoryPrivate,
                    provider.ClassLoader,
                    EventTypeFactoryImpl.GetInstance(container),
                    beanEventTypeStemService,
                    eventTypeResolver,
                    xmlFragmentEventTypeFactory,
                    eventTypeAvroHandler,
                    EventBeanTypedEventFactoryCompileTime.INSTANCE,
                    importServiceCompileTime);

                try {
                    provider.ModuleProvider.InitializeEventTypes(
                        new EPModuleEventTypeInitServicesImpl(eventTypeCollector, eventTypeResolver));
                }
                catch (Exception e) {
                    throw new EPException(e);
                }
                
                JsonEventTypeUtility.AddJsonUnderlyingClass(moduleTypes, classLoaderParent, null);

                // initialize named windows
                var moduleNamedWindows = new Dictionary<string, NamedWindowMetaData>();
                var namedWindowCollector = new NamedWindowCollectorImpl(moduleNamedWindows);
                try {
                    provider.ModuleProvider.InitializeNamedWindows(
                        new EPModuleNamedWindowInitServicesImpl(namedWindowCollector, eventTypeResolver));
                }
                catch (Exception e) {
                    throw new EPException(e);
                }

                // initialize tables
                var moduleTables = new Dictionary<string, TableMetaData>();
                var tableCollector = new TableCollectorImpl(moduleTables);
                try {
                    provider.ModuleProvider.InitializeTables(
                        new EPModuleTableInitServicesImpl(tableCollector, eventTypeResolver));
                }
                catch (Exception e) {
                    throw new EPException(e);
                }

                // initialize create-index indexes
                var indexCollector = new IndexCollectorCompileTime(
                    moduleNamedWindows,
                    moduleTables,
                    pathNamedWindows,
                    pathTables);
                try {
                    provider.ModuleProvider.InitializeIndexes(new EPModuleIndexInitServicesImpl(indexCollector));
                }
                catch (Exception e) {
                    throw new EPException(e);
                }

                // initialize create-contexts
                var moduleContexts = new Dictionary<string, ContextMetaData>();
                var contextCollector = new ContextCollectorImpl(moduleContexts);
                try {
                    provider.ModuleProvider.InitializeContexts(
                        new EPModuleContextInitServicesImpl(contextCollector, eventTypeResolver));
                }
                catch (Exception e) {
                    throw new EPException(e);
                }

                // initialize variables
                var moduleVariables = new Dictionary<string, VariableMetaData>();
                var variableCollector = new VariableCollectorImpl(moduleVariables);
                try {
                    provider.ModuleProvider.InitializeVariables(
                        new EPModuleVariableInitServicesImpl(variableCollector, eventTypeResolver));
                }
                catch (Exception e) {
                    throw new EPException(e);
                }

                // initialize module expressions
                var moduleExprDeclareds = new Dictionary<string, ExpressionDeclItem>();
                var exprDeclaredCollector = new ExprDeclaredCollectorCompileTime(moduleExprDeclareds);
                try {
                    provider.ModuleProvider.InitializeExprDeclareds(
                        new EPModuleExprDeclaredInitServicesImpl(exprDeclaredCollector));
                }
                catch (Exception e) {
                    throw new EPException(e);
                }

                // initialize module scripts
                var moduleScripts = new Dictionary<NameAndParamNum, ExpressionScriptProvided>();
                var scriptCollector = new ScriptCollectorCompileTime(moduleScripts);
                try {
                    provider.ModuleProvider.InitializeScripts(new EPModuleScriptInitServicesImpl(scriptCollector));
                }
                catch (Exception e) {
                    throw new EPException(e);
                }

                // initialize inlined classes
                var moduleClassProvideds = new Dictionary<string, ClassProvided>();
                var classProvidedCollector = new ClassProvidedCollectorCompileTime(moduleClassProvideds, classLoaderParent);
                try {
                    provider.ModuleProvider.InitializeClassProvided(new EPModuleClassProvidedInitServicesImpl(classProvidedCollector));
                } catch (Exception e) {
                    throw new EPException(e);
                }
                
                // save path-visibility event types and named windows to the path
                var deploymentId = "D" + deploymentNumber;
                try {
                    foreach (var type in moduleTypes) {
                        if (type.Value.Metadata.AccessModifier.IsNonPrivateNonTransient()) {
                            pathEventTypes.Add(type.Key, unitModuleName, type.Value, deploymentId);
                        }
                    }

                    foreach (var entry in moduleNamedWindows) {
                        if (entry.Value.EventType.Metadata.AccessModifier.IsNonPrivateNonTransient()) {
                            pathNamedWindows.Add(entry.Key, unitModuleName, entry.Value, deploymentId);
                        }
                    }

                    foreach (var entry in moduleTables) {
                        if (entry.Value.TableVisibility.IsNonPrivateNonTransient()) {
                            pathTables.Add(entry.Key, unitModuleName, entry.Value, deploymentId);
                        }
                    }

                    foreach (var entry in moduleContexts) {
                        if (entry.Value.ContextVisibility.IsNonPrivateNonTransient()) {
                            pathContexts.Add(entry.Key, unitModuleName, entry.Value, deploymentId);
                        }
                    }

                    foreach (var entry in moduleVariables) {
                        if (entry.Value.VariableVisibility.IsNonPrivateNonTransient()) {
                            pathVariables.Add(entry.Key, unitModuleName, entry.Value, deploymentId);
                        }
                    }

                    foreach (var entry in moduleExprDeclareds) {
                        if (entry.Value.Visibility.IsNonPrivateNonTransient()) {
                            pathExprDeclared.Add(entry.Key, unitModuleName, entry.Value, deploymentId);
                        }
                    }

                    foreach (var entry in moduleScripts) {
                        if (entry.Value.Visibility.IsNonPrivateNonTransient()) {
                            pathScript.Add(entry.Key, unitModuleName, entry.Value, deploymentId);
                        }
                    }
                    
                    foreach (var entry in moduleClassProvideds) {
                        if (entry.Value.Visibility.IsNonPrivateNonTransient()) {
                            pathClassProvided.Add(entry.Key, unitModuleName, entry.Value, deploymentId);
                        }
                    }
                }
                catch (PathException ex) {
                    throw new EPCompileException(
                        "Invalid path: " + ex.Message,
                        ex,
                        new EmptyList<EPCompileExceptionItem>());
                }
            }

            var moduleDependencies = new ModuleDependenciesCompileTime();

            // build bean space of public and protected
            var eventTypeCompileTimeResolver = new EventTypeCompileTimeResolver(
                moduleName,
                moduleUses,
                eventTypeCompileRegistry,
                eventTypeRepositoryPreconfigured,
                pathEventTypes,
                moduleDependencies,
                isFireAndForget);

            // build named window registry
            var namedWindowCompileTimeRegistry = new NamedWindowCompileTimeRegistry();
            var namedWindowCompileTimeResolver = new NamedWindowCompileTimeResolverImpl(
                moduleName,
                moduleUses,
                namedWindowCompileTimeRegistry,
                pathNamedWindows,
                moduleDependencies,
                isFireAndForget);

            // build context registry
            var contextCompileTimeRegistry = new ContextCompileTimeRegistry();
            var contextCompileTimeResolver = new ContextCompileTimeResolverImpl(
                moduleName,
                moduleUses,
                contextCompileTimeRegistry,
                pathContexts,
                moduleDependencies,
                isFireAndForget);

            // build variable registry
            var variableCompileTimeRegistry = new VariableCompileTimeRegistry();
            var variableCompileTimeResolver = new VariableCompileTimeResolverImpl(
                moduleName,
                moduleUses,
                variableRepositoryPreconfigured,
                variableCompileTimeRegistry,
                pathVariables,
                moduleDependencies,
                isFireAndForget);

            // build declared-expression registry
            var exprDeclaredCompileTimeRegistry = new ExprDeclaredCompileTimeRegistry();
            var exprDeclaredCompileTimeResolver = new ExprDeclaredCompileTimeResolverImpl(
                moduleName,
                moduleUses,
                exprDeclaredCompileTimeRegistry,
                pathExprDeclared,
                moduleDependencies,
                isFireAndForget);

            // build table-registry
            var localTables = new Dictionary<string, TableMetaData>();
            var tableCompileTimeRegistry = new TableCompileTimeRegistry(localTables);
            var tableCompileTimeResolver = new TableCompileTimeResolverImpl(
                moduleName,
                moduleUses,
                tableCompileTimeRegistry,
                pathTables,
                moduleDependencies,
                isFireAndForget);

            // build script registry
            var scriptCompileTimeRegistry = new ScriptCompileTimeRegistry();
            var scriptCompileTimeResolver = new ScriptCompileTimeResolverImpl(
                moduleName,
                moduleUses,
                scriptCompileTimeRegistry,
                pathScript,
                moduleDependencies,
                isFireAndForget);

            // build classes registry
            var classProvidedCompileTimeRegistry = new ClassProvidedCompileTimeRegistry();
            var classProvidedCompileTimeResolver = new ClassProvidedCompileTimeResolverImpl(
                moduleName,
                moduleUses,
                classProvidedCompileTimeRegistry,
                pathClassProvided,
                moduleDependencies,
                isFireAndForget);

            // view resolution
            var plugInViews = new PluggableObjectCollection();
            plugInViews.AddViews(
                configuration.Compiler.PlugInViews,
                configuration.Compiler.PlugInVirtualDataWindows,
                importServiceCompileTime);
            var viewRegistry = new PluggableObjectRegistryImpl(new[] {ViewEnumHelper.BuiltinViews, plugInViews});
            ViewResolutionService viewResolutionService = new ViewResolutionServiceImpl(viewRegistry);

            var plugInPatternObj = new PluggableObjectCollection();
            plugInPatternObj.AddPatternObjects(configuration.Compiler.PlugInPatternObjects, importServiceCompileTime);
            plugInPatternObj.AddObjects(PatternObjectHelper.BuiltinPatternObjects);
            PatternObjectResolutionService patternResolutionService =
                new PatternObjectResolutionServiceImpl(plugInPatternObj);

            var indexCompileTimeRegistry = new IndexCompileTimeRegistry(new Dictionary<IndexCompileTimeKey, IndexDetailForge>());

            var moduleVisibilityRules = new ModuleAccessModifierServiceImpl(options, configuration.Compiler.ByteCode);

            var databaseConfigServiceCompileTime =
                new DatabaseConfigServiceImpl(
                    container,
                    configuration.Common.DatabaseReferences,
                    importServiceCompileTime);

            var compilerServices = new CompilerServicesImpl();

            var targetHA = configuration.GetType().Name.EndsWith("ConfigurationHA");
            var serdeEventTypeRegistry = new SerdeEventTypeCompileTimeRegistryImpl(targetHA);
            SerdeCompileTimeResolver serdeResolver = targetHA
                ? MakeSerdeResolver(configuration.Compiler.Serde, configuration.Common.TransientConfiguration)
                : SerdeCompileTimeResolverNonHA.INSTANCE;

            return new ModuleCompileTimeServices(
                container,
                compilerServices,
                configuration,
                contextCompileTimeRegistry,
                contextCompileTimeResolver,
                beanEventTypeStemService,
                beanEventTypeFactoryPrivate,
                classProvidedCompileTimeRegistry,
                classProvidedCompileTimeResolver,
                databaseConfigServiceCompileTime,
                importServiceCompileTime,
                exprDeclaredCompileTimeRegistry,
                exprDeclaredCompileTimeResolver,
                eventTypeAvroHandler,
                eventTypeCompileRegistry,
                eventTypeCompileTimeResolver,
                eventTypeRepositoryPreconfigured,
                isFireAndForget,
                indexCompileTimeRegistry,
                moduleDependencies,
                moduleVisibilityRules,
                namedWindowCompileTimeResolver,
                namedWindowCompileTimeRegistry,
                classLoaderParent,
                patternResolutionService,
                scriptCompileTimeRegistry,
                scriptCompileTimeResolver,
                scriptCompiler,
                serdeEventTypeRegistry,
                serdeResolver,
                tableCompileTimeRegistry,
                tableCompileTimeResolver,
                variableCompileTimeRegistry,
                variableCompileTimeResolver,
                viewResolutionService,
                xmlFragmentEventTypeFactory);
        }