示例#1
0
        public static void InitWorkspace(List <string> typeDirectories, string workspaceDirectory, string cacheDirectory)
        {
            if (typeDirectories == null)
            {
                throw new ArgumentNullException("typeDirectories");
            }
            if (typeDirectories.Count == 0)
            {
                throw new ArgumentException("List of type directories cannot be empty", "typeDirectories");
            }
            if (cacheDirectory == null)
            {
                throw new ArgumentNullException("cacheDirectory");
            }
            if (cacheDirectory.Length == 0)
            {
                throw new ArgumentException("m_workspace cache directory must be a valid directory", "cacheDirectory");
            }

            if (s_workspaceInstance != null)
            {
                s_workspaceInstance.Dispose();
            }

            StreamManager manager = StreamManager.CreateNewManager();

            s_workspaceInstance = InitWorkspaceInternal(typeDirectories, workspaceDirectory, cacheDirectory, manager);
        }
        /// <summary>
        /// Loads the decision module based on the decision metadata
        /// </summary>
        /// <param name="decisionMetadata">The decision metadata.</param>
        /// <param name="workspaceWrapper">The workspace wrapper.</param>
        /// <param name="componentsAppDomain">The components app domain is the app domain which decision assembly is going to be loaded into.</param>
        /// <returns>Loaded decision</returns>
        internal static ILoopDecisionModule LoadDecisionModule(LoopScopeMetadata loopMetadata, IWorkspaceInternal workspaceWrapper,
                                                                                AppDomain componentsAppDomain)
        {
            DecisionLoader loader = ConstructDecisionModuleInComponentsAppDomain(loopMetadata, workspaceWrapper, componentsAppDomain);

            return (ILoopDecisionModule)loader.LoadedDecisionModule;
        }
        /// <summary>
        /// Creates the scope nested workspace wrapper. 
        /// It is specifc workspace wrapper, that uses the composite node namespace to store and load items. It pass loading and storing to its
        /// workspace instance, but with added namespace. 
        /// It also has method to setup and teardown workspace units from and to nested workspace.
        /// </summary>
        /// <param name="compositeComponentMetadata">The composite component metadata.</param>
        /// <param name="workspaceInstance">The workspace instance.</param>
        /// <param name="workspaceNamespaceId">The workspace namespace id.</param>
        /// <returns></returns>
        public static ScopeNestedWorkspaceWrapper CreateCompositeComponentWorkspaceWrapper(ScopeBaseMetadata scopeMetadata, IWorkspaceInternal workspaceInstance, string workspaceNamespaceId, AppDomain componentsAppDomain)
        {
            var type = typeof(ScopeNestedWorkspaceWrapper);

            var scopeNestedWorkspaceWrapper = (ScopeNestedWorkspaceWrapper)componentsAppDomain.CreateInstanceAndUnwrap(
                type.Assembly.FullName, type.FullName, false,
                BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null,
                new object[] { workspaceInstance, workspaceNamespaceId },
                System.Globalization.CultureInfo.CurrentCulture, new object[] { });

            return scopeNestedWorkspaceWrapper;
        }
        private static DecisionLoader ConstructDecisionModuleInComponentsAppDomain(IDecision decisionMetadata, IWorkspaceInternal workspaceWrapper, AppDomain componentsAppDomain)
        {
            // DecisionLoader must be MarshalByRef, otherwise the properties don't get filled out the 
            // way that we want them to.
            DecisionLoader loader = (DecisionLoader)componentsAppDomain.CreateInstanceAndUnwrap(
                Assembly.GetExecutingAssembly().FullName, typeof(DecisionLoader).FullName, false,
                BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null,
                new object[] { decisionMetadata.Classname, decisionMetadata.SourceAssembly, workspaceWrapper },
                System.Globalization.CultureInfo.CurrentCulture, new object[] { });

            // Perform the actual load by passing a reference to the Loader's Load function to the new 
            // AppDomain to execute
            loader.Load();
            return loader;
        }
        public static void InitWorkspace(List<string> typeDirectories, string workspaceDirectory, string cacheDirectory)
        {
            if (typeDirectories == null)
                throw new ArgumentNullException("typeDirectories");
            if (typeDirectories.Count == 0)
                throw new ArgumentException("List of type directories cannot be empty", "typeDirectories");
            if (cacheDirectory == null)
                throw new ArgumentNullException("cacheDirectory");
            if (cacheDirectory.Length == 0)
                throw new ArgumentException("m_workspace cache directory must be a valid directory", "cacheDirectory");

            if (s_workspaceInstance != null)
                s_workspaceInstance.Dispose();

            StreamManager manager = StreamManager.CreateNewManager();
            s_workspaceInstance = InitWorkspaceInternal(typeDirectories, workspaceDirectory, cacheDirectory, manager);
        }
示例#6
0
        private static DecisionLoader ConstructDecisionModuleInComponentsAppDomain(IDecision decisionMetadata, IWorkspaceInternal workspaceWrapper, AppDomain componentsAppDomain)
        {
            // DecisionLoader must be MarshalByRef, otherwise the properties don't get filled out the
            // way that we want them to.
            DecisionLoader loader = (DecisionLoader)componentsAppDomain.CreateInstanceAndUnwrap(
                Assembly.GetExecutingAssembly().FullName, typeof(DecisionLoader).FullName, false,
                BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null,
                new object[] { decisionMetadata.Classname, decisionMetadata.SourceAssembly, workspaceWrapper },
                System.Globalization.CultureInfo.CurrentCulture, new object[] { });

            // Perform the actual load by passing a reference to the Loader's Load function to the new
            // AppDomain to execute
            loader.Load();
            return(loader);
        }
示例#7
0
        /// <summary>
        /// Loads the decision module based on the decision metadata
        /// </summary>
        /// <param name="decisionMetadata">The decision metadata.</param>
        /// <param name="workspaceWrapper">The workspace wrapper.</param>
        /// <param name="componentsAppDomain">The components app domain is the app domain which decision assembly is going to be loaded into.</param>
        /// <returns>Loaded decision</returns>
        internal static ILoopDecisionModule LoadDecisionModule(LoopScopeMetadata loopMetadata, IWorkspaceInternal workspaceWrapper,
                                                               AppDomain componentsAppDomain)
        {
            DecisionLoader loader = ConstructDecisionModuleInComponentsAppDomain(loopMetadata, workspaceWrapper, componentsAppDomain);

            return((ILoopDecisionModule)loader.LoadedDecisionModule);
        }
示例#8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ComponentLoader"/> class.
 /// 
 /// Note, that this component loader is constructed in the secondary App Domain via CreateInstanceAndUnwrap.
 /// (See LoadComponent method in the ComponentsLibrary).
 /// It is essential that this is done in another App Domain, so that the assembly can be unloaded, after
 /// experiment execution is completed. 
 /// </summary>
 /// <param name="metadata">The metadata.</param>
 /// <param name="workspace">The workspace.</param>
 public ComponentLoader(ComponentMetadata metadata, IWorkspaceInternal workspace)
 {
     m_metadata = metadata;
     m_workspace = workspace;
 }
示例#9
0
 /// <summary>
 /// Initializes a new s_instance of the <see cref="NodesFactoryOfSubGraph"/> class.
 /// </summary>
 /// <param name="compositeComponentMetadata">The composite component metadata, which is going to be used to override config values in subgraph.</param>
 /// <param name="workspaceWrapper">The workspace wrapper.</param>
 /// <param name="experimentReverseLookup">The experiment reverse lookup holds information of all predecessor experiments in the path - used to prevent recursion in case subexperiment refers back to any of the previous experiments.</param>
 public NodesFactoryOfSubGraph(CompositeComponentMetadata compositeComponentMetadata, IWorkspaceInternal workspaceWrapper) : base(workspaceWrapper) //compositeComponentMetadata.SubExperimentFile
 {
     m_compositeComponentMetadata = compositeComponentMetadata;
 }
 public ScopeNestedWorkspaceWrapper(IWorkspaceInternal parentWorkspace, string workspaceNamespaceId)
     : base(parentWorkspace, workspaceNamespaceId)
 {
 }
示例#11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="WorkspaceWrapper"/> class.
 /// </summary>
 /// <param name="iospec">The iospec.</param>
 /// <param name="workspaceInstance">The workspace instance.</param>
 public WorkspaceWrapper(IOSpec iospec, IWorkspaceInternal workspaceInstance)
 {
     IOSpec = iospec;
     m_workspace = workspaceInstance;
 }
 /// <summary>
 /// Initializes a new s_instance of the <see cref="NodesFactoryOfSubGraph"/> class.
 /// </summary>
 /// <param name="compositeComponentMetadata">The composite component metadata, which is going to be used to override config values in subgraph.</param>
 /// <param name="workspaceWrapper">The workspace wrapper.</param>
 /// <param name="experimentReverseLookup">The experiment reverse lookup holds information of all predecessor experiments in the path - used to prevent recursion in case subexperiment refers back to any of the previous experiments.</param>
 public NodesFactoryOfSubGraph(CompositeComponentMetadata compositeComponentMetadata, IWorkspaceInternal workspaceWrapper) : base(workspaceWrapper) //compositeComponentMetadata.SubExperimentFile
 {
     m_compositeComponentMetadata = compositeComponentMetadata;
 }
 /// <summary>
 /// Creates the workspace wrapper, which ensures that loading and storing of workspace items has been declared by the component.
 /// </summary>
 /// <param name="originalComponentMetadata">The component metadata.</param>
 /// <param name="workspaceInstance">The workspace instance.</param>
 /// <returns>created workspace wrapper</returns>
 public static WorkspaceWrapper CreateWorkspaceWrapper(ComponentMetadata componentMetadata, IWorkspaceInternal workspaceInstance)
 {
     return new WorkspaceWrapper(componentMetadata.IOSpec, workspaceInstance);
 }
示例#14
0
 public RunnableNodeFactory(IWorkspaceInternal workspace)
 {
     Workspace = workspace;
 }
示例#15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ComponentLoader"/> class.
 ///
 /// Note, that this component loader is constructed in the secondary App Domain via CreateInstanceAndUnwrap.
 /// (See LoadComponent method in the ComponentsLibrary).
 /// It is essential that this is done in another App Domain, so that the assembly can be unloaded, after
 /// experiment execution is completed.
 /// </summary>
 /// <param name="metadata">The metadata.</param>
 /// <param name="workspace">The workspace.</param>
 public ComponentLoader(ComponentMetadata metadata, IWorkspaceInternal workspace)
 {
     m_metadata  = metadata;
     m_workspace = workspace;
 }
示例#16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="NestedWorkspaceWrapper"/> class.
 /// </summary>
 /// <param name="parentWorkspace">The parent workspace.</param>
 /// <param name="workspaceNamespaceId">The workspace namespace id.</param>
 protected NestedWorkspaceWrapper(IWorkspaceInternal parentWorkspace, string workspaceNamespaceId)
 {
     m_parentWorkspace      = parentWorkspace;
     m_workspaceNamespaceId = workspaceNamespaceId;
 }
示例#17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="NestedWorkspaceWrapper"/> class.
 /// </summary>
 /// <param name="iospec">The iospec.</param>
 /// <param name="parentWorkspace">The parent workspace instance or parent workspace wrapper.</param>
 /// <param name="workspaceNamespaceId">The workspace namespace id.</param>
 public NestedWorkspaceWrapper(IOSpec iospec, IWorkspaceInternal parentWorkspace, string workspaceNamespaceId)
     : this(parentWorkspace, workspaceNamespaceId)
 {
     IOSpec = iospec;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="NestedWorkspaceWrapper"/> class.
 /// </summary>
 /// <param name="parentWorkspace">The parent workspace.</param>
 /// <param name="workspaceNamespaceId">The workspace namespace id.</param>
 protected NestedWorkspaceWrapper(IWorkspaceInternal parentWorkspace, string workspaceNamespaceId)
 {
     m_parentWorkspace = parentWorkspace;
     m_workspaceNamespaceId = workspaceNamespaceId;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="NestedWorkspaceWrapper"/> class.
 /// </summary>
 /// <param name="iospec">The iospec.</param>
 /// <param name="parentWorkspace">The parent workspace instance or parent workspace wrapper.</param>
 /// <param name="workspaceNamespaceId">The workspace namespace id.</param>
 public NestedWorkspaceWrapper(IOSpec iospec, IWorkspaceInternal parentWorkspace, string workspaceNamespaceId)
     : this(parentWorkspace, workspaceNamespaceId)
 {
     IOSpec = iospec;
 }
示例#20
0
 /// <summary>
 /// Creates the workspace wrapper, which ensures that loading and storing of workspace items has been declared by the component.
 /// </summary>
 /// <param name="originalComponentMetadata">The component metadata.</param>
 /// <param name="workspaceInstance">The workspace instance.</param>
 /// <returns>created workspace wrapper</returns>
 public static WorkspaceWrapper CreateWorkspaceWrapper(ComponentMetadata componentMetadata, IWorkspaceInternal workspaceInstance)
 {
     return(new WorkspaceWrapper(componentMetadata.IOSpec, workspaceInstance));
 }
示例#21
0
        /// <summary>
        /// Creates the scope nested workspace wrapper.
        /// It is specifc workspace wrapper, that uses the composite node namespace to store and load items. It pass loading and storing to its
        /// workspace instance, but with added namespace.
        /// It also has method to setup and teardown workspace units from and to nested workspace.
        /// </summary>
        /// <param name="compositeComponentMetadata">The composite component metadata.</param>
        /// <param name="workspaceInstance">The workspace instance.</param>
        /// <param name="workspaceNamespaceId">The workspace namespace id.</param>
        /// <returns></returns>
        public static ScopeNestedWorkspaceWrapper CreateCompositeComponentWorkspaceWrapper(ScopeBaseMetadata scopeMetadata, IWorkspaceInternal workspaceInstance, string workspaceNamespaceId, AppDomain componentsAppDomain)
        {
            var type = typeof(ScopeNestedWorkspaceWrapper);

            var scopeNestedWorkspaceWrapper = (ScopeNestedWorkspaceWrapper)componentsAppDomain.CreateInstanceAndUnwrap(
                type.Assembly.FullName, type.FullName, false,
                BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null,
                new object[] { workspaceInstance, workspaceNamespaceId },
                System.Globalization.CultureInfo.CurrentCulture, new object[] { });

            return(scopeNestedWorkspaceWrapper);
        }
示例#22
0
 public RunnableNodeFactory(IWorkspaceInternal workspace)
 {
     Workspace = workspace;
 }
 public ScopeNestedWorkspaceWrapper(IWorkspaceInternal parentWorkspace, string workspaceNamespaceId)
     : base(parentWorkspace, workspaceNamespaceId)
 {
 }