Enterprise Library深入解析与灵活应用(5)

最近负责一个框架性项目的升级,主要是从.NET Framework 3.0建议到.NET .NET Framework 3.5,开发工具也从VS2005迁移到VS2008。但是最让我头疼的是 ,原来Team Foundation Server 2005不能正常工作,公司暂时还没有购买VSTS 2008的打算。基于TFS 2005的Team Build功能不能使用了,导致原本通过Team Build实现的功能需要手工来做,涉及到的包括:Source Code的编译、文档的生 成、VS项目类型的模板的创建、脚本的合并、安装包的生成等等。由于绝大部分 的功能分为两类:文件系统的管理(目录/文件的创建、移动、拷贝和删除)和可 执行文件的执行,所以我本打算写一个bat文件搞定就可以了,在操作过程中觉得 可扩展性太差了,于是花了半天的时间写了一个GUI的工具。

这个工具执 行一组批处理,也可以看成是一个Sequential Workflow的执行器,我把它成为 Batch Job Executor。在使用Batch Job Executor过程中,通过配置可以对批处 理的每个步骤、或者是Workflow的每个Activity进行自由地定义。从功能上将, 这个小工具仅仅是个小玩意儿,不登大雅之堂。 不过考虑到Batch Job Executor 的涉及和实现是基于Enterprise Library典型的实现方式,比如基于EL的配置和 对象创建方式,对于那些希望进一步了解EL的读者,或许可以通过这个小小的例 子一窥EL的设计原理。对于那些EL的设计不时很了解的读者,对于以下的内容, 可能在理解上可能比较困难。最好是下载源代码,结合下面的介绍,希望会帮助 了更好的理解EL。

一、Batch Job Executor使用

使用Batch Job Executor最重要的步骤就是通过配置配处理的每一个步骤进行设置,在这里我们 组成Batch的步骤成为Job Step。我们可以先来看看下面的配置示例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="batchJobExecutor" type="Artech.BatchJobExecutor.Configuration.BatchJobExecutorSettings,Artech.BatchJobExecutor"/>
    </configSections>
    <batchJobExecutor defaultBatchJob="Batch Job 1">
        <variables>
            <add name="RootLocation" value="E:\Other Projects\Artech.BatchJobExecutor\"/>
            <add name="OutputLocation" value="E:\Output\"/>
        </variables>
        <batchJobs>
            <add name="Batch Job 1" description="The first batch job">
                <steps>
                    <!--step 1-->
                    <add name="Create Temp Directory" type="Artech.BatchJobExecutor.DirectoryCreationJobStep,Artech.BatchJobExecutor"
                         directoryToCreate="$OutputLocation$" />
                    <!--step 2-->
                    <add name="Notepad" type="Artech.BatchJobExecutor.ExecutableJobStep,Artech.BatchJobExecutor" executableFile="Notepad" waitForProcessExit="false">
                        <arguments>
                            <add name="param1" value="E:\readme.txt"/>
                        </arguments>
                    </add>
                    <!--step 3-->
                    <add name="Copy to Output Location" type="Artech.BatchJobExecutor.DirectoryMoveJobStep,Artech.BatchJobExecutor"
                         source="$RootLocation$ConsoleApplication2\Bin" destination="$OutputLocation$" />
                    <!--step 4-->
                    <add name="Execute Command 1" type="Artech.BatchJobExecutor.ExecutableJobStep,Artech.BatchJobExecutor" executableFile="$OutputLocation$debug\ConsoleApplication1.exe">
                        <arguments>
                            <add name="param1" value="1st Patameter"/>
                            <add name="param2" value="2nd Patameter"/>
                        </arguments>
                    </add>
                    <!--step 5-->
                    <add name="Delete Temp Directory" type="Artech.BatchJobExecutor.DirectoryDeletionJobStep,Artech.BatchJobExecutor" directoryToDelete="$OutputLocation$" />
                </steps>
            </add>
            <add name="Batch Job 2" description="2nd batch job">
                <steps>
                    … …
                </steps>
            </add>
        </batchJobs>
    </batchJobExecutor>
</configuration>

这个配置包含两个部分:变量的定义 和Batch Job的定义。前者定义在<variables>配置节中,一个常用的变量 ,比如基地址,可以通过name-value的方式在这里定义。在本例中,我们定义两 个变量(RootLocation和OutputLocation),对变量的引用通过$variable name$ 的方式实现。而后者呢,则通过<batchJobs>配置节进行定义,我们可以定 义一个活着多个Batch Job,在本例中我一共定义了两个批处理:Batch Job 1和 Batch Job 2。

第一个批处理由5个步骤组成,它们分别是:

Step 1:创建临时输出目录,路经通过变量定义

Step 2:通过Notepad打开一个 .txt文件,文件路径为E:\readme.txt

Step 3:将原目录移到Step1创建了 输出目录

Step 4:执行Step 3移到输出目录下的可执行文件,参数通过 <arguments>配置节指定

Step 5:移出Step 1创建的临时目录

有了上面的配置,运行我们Batch Job Executor,将会得到下面的界面。 两个批处理名称在下拉框中列出,对于选中的当前批处理,5个Job Step在下面的 Grid中列出来。点击“Start”按钮,批处理便开始执行,下面的进度 条现实当前的进度。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 变量
, 配置
, job
, batch
一个
enterprise library、enterprise library 6、enterprise library 7、enterprise library 8、enterprise library5,以便于您获取更多的相关知识。

时间: 2024-08-17 20:09:34

Enterprise Library深入解析与灵活应用(5)的相关文章

Enterprise Library深入解析与灵活应用(9):个人觉得比较严重的关于Caching

Enterprise Library深入解析与灵活应用(9):个人觉得比较严重的关于CachingCallHandler的Bug 微软EnterLib的Policy Injection Application Block(PIAB)是一个比较好用的轻量级的AOP框架,你可以通过创建自定义的CallHandler 实现某些CrossCutting的逻辑,并以自定义特性或者配置的方式应用到目标方法上面.PIAB自身也提供了一系列的CallHandler,其中 CachingCallHandler直接

Enterprise Library深入解析与灵活应用(8):WCF与Exception Handling AppBl

Enterprise Library深入解析与灵活应用(8):WCF与Exception Handling AppBlock集成[下] 在上篇中,我详细介绍了如何通过自定义ClientMessageInspector和 ErrorHandler,实现WCF与微软企业库中的Exception Handling Application Block(EHAB)之间的集成.这个方案的基本思路就是:当异常从服务端抛出,利 用EHAB针对某个配置好的异常处理策略进行处理:然后将处理有的异常通过 Servic

Enterprise Library深入解析与灵活应用(8):通过WCF扩展实现与EHAB的集成[

Enterprise Library深入解析与灵活应用(8):通过WCF扩展实现与EHAB的集成[上篇] 在<WCF技术剖析(卷1)>的最后一章,我给出了一个具体的应用WCF的分布式应用实例,我把这个实例命名为PetShop.在这个例子中,我利用WCF的扩展实 现了一些设计.架构模式,比如AOP.IoC等.看过本书的读者,一定还记得我还 通过WCF扩展实现了于微软企业库(Enterprise Library)异常处理应用块 (Exception Handling Application Blo

Enterprise Library深入解析与灵活应用(4):创建一个自定义Exception Handl

Enterprise Library深入解析与灵活应用(4):创建一个自定义Exception Handler改变ELAB的异常处理机制 1.背景与动机 微软Enterprise Library ELAB(Exception Handling Application Block)提供了一种基于策略(Policy)的异常 处理方式,在不同的环境中,比如多层架构中不同的层次中,我们可以定义不同的异常处理策略.对于ELAB来说,Exception Handling Policy = Exception

Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Ha

Enterprise Library深入解析与灵活应用(3):倘若将Unity.PIAB.Exception Handling引入MVP模式 最近在做一个Smart Client Software Factory的项目.熟悉SCSF或者CAB的都应该很清楚MVP这种设计模式.MVP是MVC的一种变体,View和 Mode分别关注于UI的呈现和业务模型,View和Mode完全分离,View通过Presenter实现对业务模型的访问,Presenter"间接"地调 用View实现对UI的操

Enterprise Library深入解析与灵活应用(2):通过SqlDependency实现Cache和Data

Enterprise Library深入解析与灵活应用(2):通过SqlDependency实现Cache和Database的同步 对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理.有效地利用Caching对于增强应用的Performance(减少 对基于Persistent storage的IO操作).Scalability(将数据进行缓存,减轻了对Database等资源的压力)和Availability(将数据进行缓存 ,可以应对一定时间内的网络问题.Web S

Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Poli

Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block的集成 Enterprise Library是微软P&P部门开发的众多Open source框架中的一个,最新的版本已经出到了4.0.由于接触Enterprise Library 已经有很长的一段时间,在实际的项目中使用的频率也很高.对此有了一些积累,希望通过这个新的系列和广大网友一起分享和交流.本系列 假设读者已经对Enter

Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步

对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理.有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作).Scalability(将数据进行缓存,减轻了对Database等资源的压力)和Availability(将数据进行缓存,可以应对一定时间内的网络问题.Web Service不可访问问题.Database的崩溃问题等等).Enterprise Library的Caching Application

Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block的集成

Enterprise Library是微软P&P部门开发的众多Open source框架中的一个,最新的版本已经出到了4.0.由于接触Enterprise Library已经有很长的一段时间,在实际的项目中使用的频率也很高.对此有了一些积累,希望通过这个新的系列和广大网友一起分享和交流.本系列假设读者已经对Enterprise Library有一定的了解,故而不会对各个Application Block的基本原理和编程模型进行介绍,而把侧重点放在Enterprise Library深层次的实现原

Enterprise Library深入解析与灵活应用(6):自己动手创建迷你版AOP框架

基于Enterprise Library PIAB的AOP框架已经在公司项目开发中得到广泛的使用,但是最近同事维护一个老的项目,使用到了Enterprise Library 2,所以PIAB是在Enterprise Library 3.0中推出的,所以不同直接使用.为了解决这个问题,我写了一个通过方法劫持(Method Interception)的原理,写了一个简易版的AOP框架.(如果对PIAB不是很了解的读者,可以参阅我的文章MS Enterprise Library Policy Inje