工作流程引擎

2024-09-15

工作流程引擎(通用12篇)

工作流程引擎 篇1

0 引言

由于信息技术的发展和日趋激烈的商业竞争,人们不再满足于独立、零散的办公自动化和计算机应用,而是需要综合的、集成化的解决方案。作为一种对常规性事务进行管理、集成的技术,工作流管理系统的出现是必然的。它不仅可以改进和优化业务流程,提高业务工作效率,而且可以实现更好的业务过程控制,提高顾客服务质量,提高业务流程的柔性。工作流引擎是工作流管理系统的发动机,它直接关系到流程是否能够顺利执行以及流程的执行效率,其效率和可靠性直接决定了整个系统质量[1],因此设计一个高效的工作流引擎是非常重要的。

目前工作流引擎多采用基于数据库的数据访问方法,该方法存在效率不高的问题。为了提高引擎的工作效率,本文采用列表存储数据,基于事件消息驱动的方法来设计了一种高效的工作流引擎,对引擎的功能结构、实现方法作了详细的描述和分析;并对两种引擎的性能进行测试和分析,结果表明本设计是可行的,能有效提高引擎效率和性能。

1 目前工作流引擎研究情况

多年来,工作流引擎的问题一直是工作流领域内重要的研究内容,吸引很多学者和研究机构进行了大量深入的研究。文献[2]基于NET编程平台,开发了一种轻型工作流引擎,实现了工作流实例的解析加载和各活动节点的有序仿真运行。文献[3]以XPDL作为流程定义语言,采用Java技术,实现一个轻量级工作流引擎设计,以方便地嵌入到面向流程的应用程序中,实现工作流系统管理的功能;文献[4]提出了一种基于Web和关系数据库的能适应动态工作流模型的柔性工作流引擎,改变了传统工作流系统“僵硬”的模式,解决了工作流引擎的柔性化问题;文献[5]提出一种基于数据驱动的工作流运行方式,实现了活动与活动之间的松散耦合;文献[6]提出了数字化校园工作流引擎的系统框架,详细论述了工作流管理、并联审批与分支选择、双向流转与约束、Web服务封装等关键技术的实现。

这些研究采用了不同的设计语言,不同的应用角度提出了工作流引擎的设计方法。仔细分析这些设计方案,可以发现他们都是基于数据库的数据访问为基础,以数据库管理系统为操作对象的设计方法。该设计存在效率不高,难以承载大流量高并发数据访问的问题[7]。

2 高效工作流引擎的设计

2.1 引擎的结构设计

工作流引擎结构设计采用模块化设计,如图1所示,它包括XML解析器、任务列表管理器、调用接口、监管器等七个部分,并统一放在引擎容器中。具体为:

XML解析器是对工作流定义的XML格式文档进行解析,生成一个过程实例并添加到过程实例列表中。任务列表管理器是用户与工作流引擎进行交互的接口。该模块能根据参与者的特征返回具体的活动任务,由用户对该任务进行操作,如审批报告,起草文件等。调用接口是被调用应用程序和工作流引擎之间的接口,主要包括被调用应用程序和引擎之间的通讯及数据处理功能。引擎容器能将活动的数据传递给应用程序,应用程序处理完后将结果返回给引擎。由于引擎容器的很多处理都是在其他应用程序中完成,因此引擎需要此接口来调用外部程序。

数据库操作基本组件的作用是连接数据库,操作数据库中的记录。由于在设计上采用了List列表数据来保存工作流中的过程实例,该列表数据在服务器停机或停止工作时会消失,因此运行数据必须持久化保存到数据库中。使用此组件,引擎在启动的时候能将运行的过程实例加载到内存列表中;在引擎停止之前,能把内存的数据转移到数据库中持久保存。监管器是对工作流引擎进行管理和监督的模块,实现了工作流引擎的管理和监督。客户可以通过该模块实现对流程的干预,包括提前执行、挂起、激活、删除、暂停、终止等操作。它包括用户管理、过程实例的管理、角色管理、和数据管理。事件处理器作用是收集容器中的活动实例在运行时由于状态改变发出的各种消息事件,并对这些事件作相应的处理,在活动发出“准备就绪”消息时,它就运行该活动对应的“运行程序”;活动发出“结束”消息时,它就运行路由程序,找到下一个运行活动。

在本结构图中,不同于其他设计的是过程实例列表,它是用来存储“运行中的过程实例”的内存列表变量,引擎所有操作都是围绕它进行的。使用列表变量存储“运行中的过程实例”,能有效提高数据的访问速率,从而提高系统的工作效率。容器内核是容器运行的关键部件,它包括启动容器、加载数据、卸载数据和停止容器的功能。

2.2 引擎容器的设计[8,9]

图2是引擎容器的UML静态结构图,其中引擎容器(Work Flow Container)是工作流的核心组件,它内置实例数据列表、事件处理器、任务管理器、容器运行监管器和XML文档解析器。它拥有引擎开始和停止的操作方法以及加载数据和卸载数据的方法。

容器用WorkFlowContainer类描述,其中instances是一个List类型的静态成员变量,用以保存引擎工作中的所有过程实例。本设计把过程实例存储在instances内存变量中,而不是采用一般设计所使用的“数据库保存”,目的是便于快速访问实例数据,提高引擎的工作效率。Instances的初始化采用单件模式,在容器的构造函数中进行。节点事件处理器(node Handler)是对活动节点发出的事件(节点准备就绪、节点运行完毕)进行处理的对象。它使用了INode Handler接口来处理各种不同类型的活动节点的事件,处理方法Node Run()是在节点准备就绪后运行节点的应用程序,NodeRoute()是在节点运行完毕后进行路由,找到下一个运行节点的方法。不同类型的节点实现INode Handler接口的方法各不相同,这将在2.2节中详细论述。

任务管理器(taskManager)是工作流引擎和用户进行交换的接口。用户通过GetTaskList方法从过程实例列表Instances中获取与自己相关的任务,使用OutPutTaskList以表格的形式将任务输出到页面中。当用户点击其中一个任务是,用GetActivityByID方法找到该任务后调用Output Task Detail以字符串的形式输出任务的详细信息,用户还可以用OutPutAllApproval方法来查看任务之前的审批内容。Approval()是用户审批的方法,它将审批内容以参数的形式保存在到任务的Paras参数列表中。Agree()和Dis Agree()分别是用户审批时同意和不同意的执行方法。由于任务有轻重缓急之分,特别是在任务比较多的情况之下,对其需要进行排序。GetTaskList(Employ方法的实现过程为:1)在引擎容器的Instances列表中使用List.Find All()方法找到职员Employ所涉及的所有任务列表。2)在职员的所有任务列表中使用List.Sort()分别按上述的排序方法进行排序。排序过后的任务列表能让用户及时审批处理重要事情,提高工作效率。

容器运行监管器(regulatory)是管理人员用来管理和监控引擎工作的接口。它包括查找正在运行的、挂起的或已经完成的过程实例,暂停、回复实例,以及修改、删除实例等。XML文档解析器(parser)是用来解析过程定义文档。在读取定义文档后,解析器根据文档内容生产一个过程实例,并将该实例添加到引擎容器列表中,同时启动和持久化该过程实例。

引擎容器除了具有上述成员外,还具有一些操作方法。其中Load()是加载过程实例数据的方法,在使用构造函数建立一个容器对象后,必须把数据库中保存的还没有运行完的过程实例加载到instances列表中。Start()是开始容器的运行:容器在加载完过程实例后,就开始实例的运行。一但应用系统停止工作,就需要使用UnLoad()方法来将没有完成的实例持久化保存到数据库系统,同时释放instances占据的内存空间。Stop()方法用来停止容器、销毁容器。

2.3 节点事件处理器

节点事件处理器是一个INode Handler接口,包含有Run()和Route()两个方法。由于工作流拥有开始、结束、条件判断、分叉、合并、活动等各种类型节点,节点按运行方式又有自动和手动之分,因此每种节点事件处理器的实现INode Handler接口方式各不相同。

开始和结束节点的处理器(Start Node Handler和EndNodeHandler):当引擎容器收到开始和结束节点的“准备就绪”、“完成”事件后,调用对应事件处理器来处理该事件。Start Node Handler对象的Run()方法无执行程序,Route()方法通过节点的转移找到下一个节点,并把它的状态设置为“就绪”,激发其“准备就绪”事件发生。EndNodeHandler对象由于是最后一个节点无需路由,因此其Route()方法是空运行;其Run()方法将节点和对应过程实例的状态设置为“完成”。

分叉节点处理器(ForkNodeHandler):分叉节点是将一个节点的执行分成几个并行的执行,当引擎容器收它的“准备就绪”、“完成”事件后,分别运行分叉节点事件处理器对象的Run()、Route()方法。Run()方法无事件处理,只需把分叉节点的状态设置为“完成”即可,Route()方法则通过分叉节点的转移找到所有并行节点,并把它的状态设置为“就绪”。

合并节点处理器(Join Node Handler):当所有并行节点运行完毕后,由合并节点来完成路由的合并。合并节点事件处理器的Run()方法同样只需把合并节点的状态设置为“完成”即可,Route()方法则需要判断所有并行节点是否都已“完成”,如果“完成”就找到下一个节点并激活它;否则不能路由。

一般节点处理器(GeneralNodeHandler):一般节点是指处理业务的活动节点,如“起草报告”,“邮件通知”。它又分为自动和手动运行两种方式,如“起草报告”是手动执行的节点,“邮件通知”是自动执行的节点。一般节点的事件处理器使用Run()方法处理节点的“准备就绪”事件,如果一般节点是手动型的,则无需做如何事情,由人工完成;如果是自动型的,就找到节点的Action对象,在其class属性中保存有可执行程序的“.dll”文件。使用编程系统的反射机制加载该文件,实例化并运行执行程序。由于需要引擎处理的应用程序业务不同,只要其实现Action Interface接口,然后生成为“.dll”文件即可由引擎自动调用。一般节点的事件处理器的Route()方法很简单,在找到下一个节点后修改其状态为“准备就绪”即可。

条件判断节点处理器(IfNodeHandler):条件判断节点分为手工和自动类型,手工判断是由人工来执行的判断,如“同意”、“不同意”;自动判断是由引擎来进行的判断,如“金额大于1万元吗?”,它需要引擎读取实例的金额数据来自动作出判断。条件判断节点事件处理器的Run(方法对于手工判断类型不作任何处理,由人工通过设置节点的“To”参数值来完成;对自动判断类型与GeneralNodeHandler一样,由运行实现Action Interface接口的“.dll”文件来设置“To”参数值完成。Route()方法读取“To”参数值,根据“To”参数值作相应的路由。

2.4 事件驱动下的引擎高效运转机制

一般引擎采用“查询方法”来实现流程的运转,即开启一个进程,轮询数据库中活动实例的状态(state),如果其发生变化,则执行对应的程序。为了提高效率,本设计采用了基于事件驱动的流程运转机制,当活动状态发生变化时,就会发出消息,活动所在的过程实例收到消息,立即通过事件处理器执行对应的程序。

图3是手动活动节点工作流的运转过程,引擎过程实例在处理完State Initiated Change事件后,活动停止运行,直到用户参与活动的任务且完成后,将其state设置为“completed”,过程实例接着执行下面动作。

工作流的流转采用了事件驱动机制。事件驱动机制在一个对象的状态发生变化时,能够及时通知其他对象,使其根据事件的不同作出不同的反映。在这里,一旦活动发出“准备就绪”事件,过程实例对象就立即运行活动的执行程序;程序手工执行完毕,活动又发出“运行完毕”的事件,过程实例对象在收到此消息后,执行路由程序,找出下一个活动节点,并将其状态有“原始状态”改写为“准备就绪”,重复前面的过程。

3 性能测试

一般引擎采用操作数据库来访问数据的方法,本设计采用直接访问列表对象的方法,为了测试两种引擎的性能,对它们进行了运行比较。测试的硬件环境为:处理器AMD Sempron X2 190,内存2048MB。软件环境操作系统:Windows 2003 server。开发平台:vs.net 2008。运行环境:I I S 6.0+S Q L 2 0 0 5。实用工具:LoadRunner8.1。

表1是利用测试软件模拟不同的用户并发数,对两个引擎进行访问,记录引擎一个自动活动(通知用户)实例开始运行到离开该活动的平均时间(单位为毫秒)。

从表中可以知道,本设计采用的列表引擎在同一个活动运行同一个外接程序到离开该活动所需时间比一般引擎少得多,在并发数增大时,这一优势更加明显。

4 结束语

本文以.net作为开发平台,以引擎容器和组件技术为基础,提出了一个高效工作流引擎设计。该引擎是从制造企业办公自动化系统项目中提炼出来的,该系统自从2012.3上线以来,运行情况良好,数据量已达百万级。该引擎具有以下特征:1)引擎的运转基于事件驱动,事件能及时传递消息,高效驱动流程运转。2)放弃一般设计中使用数据库来保存数据,而是采用了列表来存储工作流过程实例的方法,确保了系统能高效快速地访问容器数据,提高引擎工作效率;数据库只是作为数据持久化工具,而非主要的操作对象。由于时间和工作关系,引擎对流程可视化定义方面有待完善。

摘要:针对目前工作流引擎效率不高的问题,从实用的角度出发,提出了一个基于事件驱动的高效工作流引擎设计方法。以组件技术为基础,内存列表变量为数据存储对象,基于事件驱动,设计了一个容纳组件的工作流引擎容器,为工作流的高效运转提供了一个支撑平台,提高引擎对数据的访问速度和系统的运行效率,尤其是提高工作流管理系统可靠性及其在处理大规模复杂的且具有并行业务的流程方面的能力。该引擎操作简便、安全稳定、易于维护和移植,上线近一年来,数据量已达百万级,运行情况良好,在实际应用中得到了检验。

关键词:事件驱动,工作流引擎,组件技术,高效

参考文献

[1]方木云,刘辉.高级软件工程[M].北京:清华大学出版社,2011.

[2]杨明顺,韩周鹏,余婷,李言,邵利真.一种轻型工作流引擎的设计与实现[J].西安理工大学学报,2013,1:20-26.

[3]蔡孝武,韩永国,蓝科.一种轻量级工作流引擎的研究与设计[J].计算机工程,2010,36(20):78-82.

[4]路春光,孟丽丽,郝立文,马琨乐.基于WEB的柔性工作流引擎的设计[J].微计算机信息,2006,5:21-23.

[5]陈义松,汪芸.基于数据驱动的工作流引擎的设计与实现[J].微电子学与计算机,2012,11:138-140.

[6]何倩,祥武,王勇.数字化校园工作流引擎的设计与实现[J].计算机工程与应用,2009,45(25):82-84.

[7]张洪山,殷人昆,张素琴.基于Web的工作流引擎设计[J].计算机工程,2004,2:83-85.

[8]Will Aalst,Kees Hee.王建民,闻立杰,译.工作流管理——模型、方法和系统[M].北京:清华大学出版社,2004.

[9]战德臣,徐晓飞.基于工作流引擎的构件组装体系结构[J].软件学报,2006,17(6):1401-1410.

工作流程引擎 篇2

搜索引擎三段式工作流程总结

现在我对这三点简单的阐述下:

二、预处理

1.关键字的提取

3.链接分析

三、查询服务

1.查询方式和匹配

2.结果排序

3.文档摘要

返回至seo技术总汇★电子商务 或者至

中国搜索引擎优化(百度为例)的原则

前进至

seo初级频道

第一节至第十八节 全部课程

seo_bbs全频道

seo初级频道seo中级频道seo高级频道seo升华频道seo营销频道

博客案例:爱家美免费博客

seo技术总汇★电子商务 首页

工作流程引擎 篇3

[关键词] 分布式工作流引擎模型分割过程调度柔性角色调度

本文先从电子商务业务过程模型的分割服务开始讨论分布式工作流引擎的关键技术,模型分割服务是整个分布式工作流引擎系统的基础服务,介绍了分布式工作流引擎的调度服务,并根据电子商务的实际特点提出角色的柔性解析方案。

一、模型分割服务

现代电子商务业务过程总体上采用层次结构。在大多数情况下,合作的企业之间如何协作是预先协议好的,各部门之间的交互可以通过一个单独的顶层业务过程描述,又称为根过程。

顶层过程中的活动分别由不同的子过程服务实现,子过程4中的两个离散活动T和U分别实现了顶层过程中的活动W和Z。这些过程服务可以是属于同一个组织不同部门的,也可能是属于不同组织的,为了实现顶层过程描述的共同目标而组合在一起,是一种动态的松散的连接关系。整个过程可以作为粒度更大的Web服务发布,也可以被服务请求者用来组成更高层次的业务过程。

二、过程级调度服务

工作流引擎的调度服务是工作流模型实例化之后的运行服务,是工作流引擎的核心功能模块,分为两个层次:过程级调度服务和活动级调度服务。相对集中式的工作流引擎,分布式工作流引擎在调度服务上可以实现更好的扩展性。可靠性、高吞吐量和良好的性能。

在过程路由选择上除了WPDL中定义的分叉、合并之外,用户在需求上还存在循环、跳过、反馈等路由需求。对过程定义的改进、过程实例的更改和迁移同样是非常实际的需求。因此有必要在过程级调度服务上提供一套柔性的服务。

三、柔性角色调度服务

通过上一节过程级调度所产生的活动实例之后,需要负责为工作项分配合适的执行人或者资源。目前的绝大多数应用在电子商务中的工作流管理系统在适应性方面都做的很不够,在活动任务的分配上,无论对执行人还是资源都是采用静态的方法,这样做的好处就是工作流引擎处理的时候可以非常方便快捷的对执行人和资源进行调度,但缺点是显而易见的。

本文仅对角色的分配作论述,提出的角色解析模型是一个引入了实例级上下文关系支持完全动态分配的柔性角色解析。

1.工作流活动角色解析

在这样一个工作流的标准工作过程中,对于一个活动可能需要有多个参与人共同完成,也可能是在定义的时候无法确定或没有必要确定到某个具体的人,而只是指定了一定的选择范围,以及对应的规则条件。从获取工作项任务的方式上可分为推式(Push)和拉式(Pull),从工作项任务的处理策略上又可分为协作型和排他型,下面分别给出解释。

推式:就是由工作流引擎负责从满足条件的用户集中选取一个或多个用户把工作项任务指派给它或它们,这些用户负责完成该任务。

拉式:是基于每个可能执行人都有较大的工作积极性前提下的,工作项任务对可能执行人集合内的每一个可能执行人都是开放的,每个潜在执行人都可公平的竞争任务。

协作型:指按照某个条件允许一定数量的用户同时执行该任务,即一个活动实例产生多份相同工作项任务分配给执行人执行。

排他型:指一个活动实例产生一个工作项任务,处理简单,不做论述。

2.柔性角色解析算法

本文提出的柔性角色解析算法的宗旨就是尽可能的满足用户对活动任务分配的各种需求,该算法是从“定义级“和“實例级”两个层面来实现的。

当用户定义一个活动的时候就为这个活动指定了可能的任务参与人,也就是静态绑定了参与人,并且指定了各种相关信息。这种“定义级”的指定参与人己经可以满足用户的大部分需求了,当用户需要根据实际情况来限定,修改活动参与人的时候,就可以通过“实例级”的实体对象进行操作。

下图是一个活动任务(工作项)产生时候的角色解析算法流程图:

柔性角色解析流程图

四、小结

本文首先对顶层模型的分割进行了介绍,然后就过程级调度服务和活动级调度服务进行了论述。过程级调度服务的过程路由调度和过程更改调度的目的就是激活合适的活动实例,提供最大限度的柔性和适应性。最后提出了执行人工型任务的柔性角色解析方法,促进电子商务系统中的执行人员更高效的完成任务,提高服务质量。

企业级工作流引擎概述 篇4

1.1 工作流

致力于工作流管理标准化的国际性组织———工作流管理联盟 (WfMC) 为工作流做了这样的定义:工作流是一类能够完全或者部分自动执行的经营过程, 它根据一系列过程规则、文档、信息或者任务能够在不同的执行者质检进行传递与执行。

图1是WfMC给出的工作流参考模型。它指出了5类接口。接口1:工作流服务和工作流建模工具间接口, 包括工作流模型的解释和读写访问;接口2:工作流服务和客户应用之间的接口, 这是最主要的接口规范, 它约定所有客户方应用和工作流服务之间的功能访问方式;接口3:工作流机和应用间的直接接口;接口4:工作流管理系统之间的互操作接口;接口5:工作流服务和工作流管理工具之间的接口。

1.2 工作流引擎

从上面的工作流参考模型我们可以看出, 工作流引擎要衔接各个接口的工作, 在工作流模型中处于核心的地位, 是工作流的重要组成部分。一个典型的工作流引擎大致应提供以下功能: (1) 解释流程定义; (2) 对流程实例进行控制———启动、激活、挂起、终止等等; (3) 流程活动间的导航, 应当包含串行或并行的流转、截止时间表、工作流相关数据的解释等等; (4) 特殊参与者的加入或退出; (5) 确定用户关心的工作项目和支持用户交流的接口; (6) 维护工作流的控制和相关数据, 接收或者发送工作流相关数据到应用程序或用户; (7) 发起外部应用程序或链接任何其他工作流相关数据的接口; (8) 监督控制和管理工作流的活动, 检查目的活动。

2 工作流模型分析

工作流通过人、业务规则和信息对象之间的相互作用完成特定的业务目标, 它是根据业务规则路由工作以及按个人在组织中的职位或功能角色分派工作的方法和方式。应用工作流的目的就是让人们能够在“正确的时间, 正确的地点, 由正确的人员做正确的事”。说的简单一点, 工作流就是将信息在正确的时间内送到正确的人手中, 这个人处在正确的工作环节, 由他来对信息进行正确的处理。这4个正确的要求, 构成了对信息处理的一个约束, 我们把这个约束称为“活动”。活动是包括了对人、时间、信息处理的综合概念。所以工作流可以再抽象成为信息依据规则在活动之间流动。从开发的角度, 有两个关键的处理要素:活动、路由。

2.1 活动

从前面的分析, 我们可以知道活动的3要素:人、时间和信息处理。

2.1.1 人

人指的是要有正确的人来处理信息。因为所有的信息都要由人来处理, 所以人是工作流应用中最重要的要素。在工作流中的人员不仅仅是作为个体的人, 更多的是作为组织中和他人存在依存关系的社会人。可能是一个工作岗位———管理财务的经理, 可能是一种关系———我的主管, 可能是一种角色———信息技术部秘书。如何获得这些正确的人是工作流应用的一个重点难点。

2.1.2 时间

活动就是工作流应用中的操作环节, 涉及到如何处理正确及时的信息。一个得到正确处理的活动, 要求对信息处理正确完整, 还有一个重要的内容就是要求对信息处理及时。对工作流应用中的每一个活动一般都有很明确的时间上的要求。

2.1.3 信息处理

按照对信息处理的要求不同, 我们可以将活动分成4种:普通活动、串行活动、并行活动和灵活活动。

(1) 普通活动。

普通活动指的是那些只有一个步骤的活动。这种活动, 在它的内部没有其他更小的活动, 只要一个操作就可以完成整个活动。

(2) 串行活动。

串行活动指的是在活动的内部存在着一连串更小的活动, 这些更小的活动有一定的顺序, 由不同的人员依次执行, 只有当所有的这些更小的活动都执行完成后, 信息才能流转到后续活动, 串行活动也可以叫做顺签活动。

(3) 并行活动。

并行活动指的是在活动的内部存在很多个更小的活动, 这些更小的活动之间没有逻辑上的先后关系, 可以由不同的人员同时执行, 只有当所有的这些更小的活动都执行完成了, 信息才能流转到后续活动, 并行活动也可以叫做会签活动。

(4) 灵活活动。

灵活活动是串行活动和并行活动的综合体, 它可以同时是并行活动, 也可以是串行活动。灵活活动还有其他的附加要求。

2.2 路由

路由是工作流应用中最核心的机制之一, 因为它关系到一个工作流应用能否正确地完成。只要有一次路由不正确, 工作流就不能正确地完成。路由也是工作流应用中最有难度的工作之一。因为不同的工作流应用对应的路由情况是非常非常多的, 下面我们粗略地分析一下工作流路由可能的情况。

信息的流动按流动的方式分为单线程流动和多线程流动, 按先后活动的关系可分为一对一流动、一对多流动、多对一流动。这两种分类构成工作流应用的基本方面, 再复杂的工作流应用也可以由它们来组成。下面我们分别讨论一下这两种分类的情况。

2.2.1 流动方式

(1) 单线程流动。

单线程流动是工作流最常见的流动方式, 即应用在一个工作流里面就可以完成, 不和其他工作流发生关系。它的形式如图2所示。

当然, 现实中的单线程流动并不会如同图示的那么简单, 大部分的工作流应用要比图2所示的复杂得多。很多很复杂的工作流, 涉及数百个活动, 它们本质上可能还是单线程流动。

(2) 多线程流动。

多线程流动在工作流应用中有很广泛的适用范围。在实际工作中, 各种应用总是存在着或多或少的关系, 其中有一种关系就是当某个活动发生时会导致另一个应用发生, 这就是多线程流动。它的形式如图3所示。

2.2.2 先后活动的关系

信息总是在活动中流动, 从一个活动到另一个活动, 所以工作流应用最关心的一个问题便是信息如何流转到它的后一个活动。

(1) 一对一流动。

一对一流动是两活动信息流动关系中最简单的一种, 它只将信息流动到后续的一个活动中去。它有两种可能的情况:一种是后续活动本身就只有一个, 这种情况最简单;还有一种情况是后续活动本身有多个, 但受条件的限制在同一时刻只能有一个后续活动会发生。如图4所示。

(2) 一对多流动。

一对多流动就是将信息流动到多个后续活动中去。它也有两种情况:一种是其所有的后续活动都要接收信息;还有一种情况是在一个活动的所有后续活动中, 只有符合条件的多个后续活动才接收信息。其形式如图5所示。

(3) 多对一流动。

多对一流动就是将多个活动中信息流到一个活动中, 它本质上就是信息的合并。它的形式如图6所示。

从先后活动的关系还可以引申出路由的方向问题。在实际的工作流中, 就会存在很多其他方向的流动。

2.2.3 路由决策

从先后活动的关系还可以引申出路由的选择问题。信息为什么流转到这个活动, 而不是另一个活动, 是由一定的条件决定的。其中的一个条件就是用户的决策, 用户觉得该怎么流动, 信息就怎么流动。用户在决策时, 会有一定的选择供用户决策。在一个系统中至少应该存在以下4种不同的决策方式: (1) 不决策:这种决策选择的意思是说在路由过程中, 用户不进行决策; (2) 排他性决策:这种决策选择, 它的选项是互斥的, 用户只能选择其中的一项; (3) 选择性决策:这种决策选择, 它的选项并不互相排斥, 用户可以选择其中的一项或者多项; (4) 复杂选择:这种决策选择, 就不是排他性决策或者条件决策那么简单了, 它是两者的组合。首先是排他性决策, 每个排他性决策可能对应一个选择性决策。为什么需要有这么一种选择方式呢?我们可以来看一个具体的例子:

在这个例子中, 选择是十分清楚的。如果, 用户决策“通过”, 那么还有3种选择:直接通过、法律审核和领导审核。如果, 用户决策“不通过”, 那么就是不通过。这种组合选择的方式在实际应用中是非常多的, 用户的选择也是非常的直观。如果采用其他方式变通而来的话, 其选择就很不直观, 对用户也是非常的不友好。就一上面这个例子来说明, 如果采用变通, 它的选择将会是怎样的一个局面。

这就是不采用复杂选择时的情况, 十分之糟糕。上例中的情况, 还只是最简单的, 如果再复杂的情况, 那么选择的选项就将以指数上升, 这是不能容忍的。所以, 在工作流中, 必须采用复杂选择。

2.2.4 分发与合并

从一对多和多对一的流动方式还会牵涉到信息和并的问题。信息经过分发自然就会有合并的要求。分发和合并也是工作流应用的难点之一。

(1) 分发。

将一份信息分成多份, 经由不同的路由, 由不同的人员进行分别处理, 这就是分发。分发从涉及的流程上分有两种:流程内分发、流程外分发, 从复杂程度上也有两种:单级分发和多级分发。

(2) 合并。

分发后需要做的就是合并信息。由于合并是分发的逆过程, 所以它的分类也和分发一样, 按涉及的流程分:流程内合并、流程外合并, 按复杂程度分:单级合并、多级合并。合并工作的难点在于如何确认哪些信息需要合并, 数量是多少, 知道了这两个信息, 合并就是一个十分简单的事了。尤其对于流程外合并和多级合并。我们知道, 合并的原则在于每一次只合并那些来源于同一父亲的信息, 这种方式最容易实现, 也是最容易控制的。

3 结束语

以上描述的是工作流的流转中的一些情况, 只是从理论上分析了一个企业级工作流应用可能遇到的问题。但是, 实际的情况可能会更加复杂, 在实际中遇到的一些问题如何解决是我们在基本概念设计和流程定义中需要仔细分析的。

参考文献

[1]Workflow Management Coalition:The Workflow Reference Model (WFMC-TC00-1003Issue1.1) , 1995.

[2]Workflow Management Coalition:Workflow Management Coalition Terminology and Glossary (WFMC-TC-1011Issue3.0) , 1999.

工作流程引擎 篇5

XX是创新资源富集的中部重镇,有互联网企业XXX余家,从业人员超过XX万人。我们坚持以习近平新时代中国特色社会主义思想特别是总书记视察湖北重要讲话精神为指引,把坚持党的领导、加强党的建设贯穿互联网企业发展全过程,深入实施“红色引擎工程”,一手抓组织体系建设,一手抓活动载体创新,不断提升互联网企业党建工作水平。

健全组织体系,不断扩大党的组织和工作覆盖。一是明确责任完善工作体系。市委组织部牵头抓总,将网信、商务、科技等部门纳入两新工委,明确市网信办主抓互联网企业党建工作职责。依托市网信办成立互联网行业党委,由市网信办主任担任行业党委书记。在XXX国家级开发区分别成立区域互联网行业党委,形成责任明晰、条块结合、上下贯通的工作体系。二是集中攻坚推进组织覆盖。统筹工商、税务、人社等部门力量,以XXX、XXX等互联网企业集聚区为重点,通过区域联建、产业共建、龙头带建等方式,推动XXX个产业园区、商务楼宇、众创空间等成立综合党委、XXXX家互联网企业建立党组织,党组织覆盖率达XX%,属地全国百强及员工百人以上企业全部建立党组织。三是精准指导持续巩固提升。明确XX名两新工委委员直接联系XX家龙头企业,点对点指导党建工作。从网信、商务、科技等部门选派XXXX名干部,组成XXX个“红色导师”团队,派驻企业加强具体指导。对新建党组织实行送党建经费、党建标识、党建资料、党建设施、党建指导“暖心五送”。

创新活动载体,增强互联网企业发展活力。一是丰富线上活动。鼓励党组织运用党建APP、微信公众号、直播平台等手段,创新开展网上党组织活动。今年“七一”,XXX党委在线发起“万人译党章·多语忆初心”活动,X万余名党员译员率先报名,将党章翻译成英日俄法4种文字广泛传播,营造了党建工作良好氛围。二是做实线下活动。引导企业党组织发挥自有资源优势,在践行社会责任中擦亮企业品牌、提升社会形象。XXX党支部组建以党员司机为骨干的XXX台“红色车队”,高考期间为考生义务送考,高温期间为环卫工人送清凉。XXX党支部开通电商扶贫“优品直通车”,每年组织党员走进XXX,组织当地特色农产品网上销售,帮助农民增收近千万元。三是线上线下互动。采取“线上报名、线下活动、网上直播”方式,开展“支部主题党日观摩学习月”活动,指导企业党组织将主题党日活动开展到重点项目建设现场、结对共建联系点、脱贫攻坚第一线,精选XXX堂党课在网上直播,在线观看人数达XX万。

工作流程引擎 篇6

面对从玩家到媒体再到技术研发人员纷纷对虚幻3引擎的膜拜,你完全可以想象它已经成为网游技术领域的一个图腾。那么,究竟是什么让Unreal3能走上神坛呢?难道仅仅是在高精度动态渲染效果和画面表现力上拥有着无与伦比的优势,和极端细腻的人物、物品模型给人留下了的深刻印象么?

抛开枯燥的数据和介绍,让我们走入虚幻3的历史,从一个又一个的代表作,来看看虚幻3引擎,究竟是怎么成为次世代的引擎图腾的!

回顾:虚幻引擎一代、二代发展历程

在第三代引擎推出之前,虚幻系列并没有现在这么火。最初保持引擎市场的是DOOM的开发公司ID Software。这家公司研发的DOOM系列尽管没能大红大紫,但是却从引擎授权市场上获得了大量的收益,并且形成了一家垄断之势,直到Epic研发的虚幻引擎出现,才打破这一格局。

可能你会问:为什么游戏研发对引擎会如此看重?其实很简单,游戏的引擎就是一款游戏的大框架,有这个框架才有里面一切内容的体现,它是游戏产品最底层的技术,底层基础足够强大,才有一切浮现于你眼前的游戏表达形式,关卡、动作、音乐,后来的纹理处理、越来越逼真的场景画面等等,都依赖于此。而由于引擎的研发极为复杂,顶级引擎的研发动则三年五年,很多产品没有时间去做引擎的研发工作,因此购买一款成功的引擎就成为游戏研发中的快捷通道。

凭借更低的授权价格和更出色的表现,虚幻引擎开始成为市场主流,一代引擎诞生了包括《杀出重围》、《星际迷航》等作品,而二代引擎逐步壮大,精彩作品不断,包括了《彩虹六号》、《杀手13》、《神偷3》、《细胞分裂》、《家园》等众多顶级大作。当然,这个过程中最具有代表性的《虚幻竞技场》系列发展非常迅猛,不仅成为射击游戏领域的代表作,同时还成为WCG的比赛项目之一。

2004年,Epic正式发布虚幻3引擎,这个纵横驰骋次世代游戏领域的巨无霸开始了它的封王之路。

U3封王之起航:在主机平台大放异彩(2008年前)

U3第一次大放异彩的地方,是次世代主机平台。原因其实不难理解,U3引擎本就是一套为DirectX 9/10 PC、Xbox 360、PlayStation 3平台准备的完整的游戏开发构架,它提供了大量的核心技术阵列和内容编辑工具,适合高端开发团队的基础项目建设。

2006年夏天,在XBOX360平台上出现了一款名叫《RoboBlitz》的动作游戏。这是第一款基于虚幻3引擎开发的游戏。这款游戏无论是对新硬件技术的充分利用,还是对虚幻3物理引擎新特性的使用上,都有不少地方不尽人意。但作为先行者,其重要性不可估量。

一年之后,Epic自主研发的《战争机器》出现。正是这款游戏,第一次完全的发挥出了Unreal3引擎的全部实力。无论是贴图,建模,光影,还是物理效果运算,都堪称是历史性的跨越。惊人的画面效果得到了绝大多数玩家以及众多制作人的肯定。因此,《战争机器》也就成为了主机平台上Unreal3引擎的第一款代表作。

在这个阶段,一系列真正领悟了U3引擎技术的产品开始崭露头角,《生化奇兵》和《荣誉勋章》系列成为2008年之前U3引擎最富盛名的产品,当然,它们都还得唯《战争机器》马首是瞻。

U3封王之发展:精品大作进入爆发期(2008-2010)

在《战争机器》之后,U3大作进入了一个井喷期,而起到一个关键标志性作用的就是2009年11月,Epic正式免费开放了U3引擎,促使这一个阶段U3引擎开始成为无可替代的主流。《质量效应》、《镜之边缘》、《潘多拉的魔盒》、《战争机器2》都在这个时期登场。其中有一款游戏是不得不提,那就是《镜之边缘》。这款游戏当年获得《OXM》杂志9.5/10的评分,被称赞为“由创新带来的逼真的运动感和新奇的游戏性”。同时,《镜之边缘》囊括了当年几乎所有的游戏大奖。

而正是unreal3引擎的即时光迹追踪、HDR光照、虚拟位移等新技术支持,让镜之边缘获得了如此大的成功。Unreal 3引擎与Beast光影效果插件相配合,实现了电影CG等级的画面,实在是恐怖之极。《镜之边缘》对第一人称射击游戏、传统动作游戏两个领域的发展都起到了“革命性”的推动作用。

同一时间,中国国内获得U3引擎授权,并且开始崭露头角。最早公布使用虚幻3引擎推出的是舞蹈游戏《一舞成名》和久游的《神兵传奇》,但对U3引擎利用程度的差异过大,导致这些产品在国内纷纷夭折。

但就是这些产品,让国内玩家第一次真正惊叹于虚幻3引擎的强大,并且逐步开始出现了追捧的情绪。

U3封王之巅峰:网络与次世代同步的辉煌期(2011-?)

2011年DX11显卡硬件技术的升级与普及,U3引擎的性能得到了进一步的硬件支持,各种基于Unreal3开发的作品呈井喷状态出现。除了《战争机器3》、《使命召唤》为代表的主机游戏继续震撼玩家外,以亚洲国家为主的网游产品也开始抢夺眼球。

韩国的《剑灵》、《C9》、《TERA》等都是源自U3引擎,预计2011年进入中国市场;中国的《流星蝴蝶剑OL》、《全球使命》,腾讯刚刚公布的T-Game也源于U3引擎。

尽管很多国内玩家都还在期待《剑灵》、《C9》等游戏,然而U3引擎在网络时代的大作已经来到了我们的身边,只是他们的命运都不算好。2010年久游重金打造的《神兵传奇》成为虚幻3引擎作品失利中国的典型代表,而在它之前还有《一舞成名》也是遭遇了惨败。业内分析,这与不少中国游戏研发公司无法吃透U3引擎,结果导致产品设计理念与引擎的强大脱节的现象,致使早期U3引擎产品在中国让人失望。

2011年才真正被誉为是U3引擎网游产品的爆炸年。首当其冲的是来自虚幻3引擎国内授权商英佩亲自操刀研制的《全球使命》。传闻这款由虚幻3引擎研发的TPS游戏代表作出自《战争机器》原班人马之手,它第一次在网游玩家的视界中呈现出U3引擎的强大威力。相较于过去的射击游戏,第三人称视角可以实现攀爬、翻滚、盲射、双武器切换、近身格斗等过去射击游戏所无法实现的游戏元素,通过强大引擎将实际游戏场景中光线的微弱变化、气象效果与光照完美融合,带给玩家无限逼真身临其境的感觉。这款TPS作品在国内推出后广受好评,也正式掀开了U3引擎冲击网游市场的序幕。

接下来将进入我们视野的虚幻3引擎游戏还包括《流星蝴蝶剑OL》,这是久游在重新吃透U3引擎后卧薪尝胆的力作,武侠动作游戏的概念让这款产品期待值很高;来自韩国的Tera是U3引擎产品大打成人牌的代表作,而最近的韩国顶级U3引擎作品聚焦的目光落在了《剑灵》和《C9》的身上。

千万不要认为虚幻3引擎的威力仅仅是在射击游戏和动作游戏身上。国内将推出的舞蹈游戏《炫舞吧2》、MMO作品《聊斋》、动作类游戏《无双OL》等都是U3引擎多元化研发的代表作。在这些焦点游戏的背后,还有大量采纳U3引擎推出的各类游戏产品,预计2011年上市的U3作品,将超过20款!

早前有评论称:2011年的网游市场是被虚幻3引擎叫醒的,其实这才仅仅是一个开始,虚幻3引擎的强大瞄准到是DX11时代,也就是次世代的顶级大作,按照目前国内研发U3引擎产品的进度,要彻底将U3引擎的性能开发至残废,还得好几年的时间。

工作流程引擎 篇7

现代企业发展中,管理活动的问题主要出现在业务方面。与以前的业务活动相比,业务对于企业的发展更显重要。于是出现了“关键业务”,它主要与企业的核心活动相联系,在企业价值链中占据主体地位。正如如今应用广泛的“业务流程再造(business process reengineering,BPR)”,就是把企业中的关键业务提取出来,改造业务流程,以提高企业的竞争力。关键业务的特点如下:1)业务流程参与人员涉及多个部门,而且流程逻辑性高;2)业务流程管理要求交互性高;3)业务流程会根据需要进行改变;4)业务流程中流通的数据量大,消息要求及时准确,并且拥有严格的权限设定。

为了应对企业灵活多变的业务活动,提高业务流程的效率,就需要把基于工作流(Workflow)技术的工作流引擎(Workflow Engine)引入协同工作的系统设计中。特别是对中小企业来说,在资金不充裕情况下,使用较少的资金使得业务流程的管理系统满足发展,而使用轻量级工作流引擎是从够用、灵活和低成本的设计原则出发,不追求工作流引擎的功能的完备性和复杂性,指使实现其中必要的功能和特征[2]。这不仅可以满足企业协同工作系统的基本要求,还可以提高系统的柔性。

本文以一个轻量级的工作流引擎的设计为例,通过工作流引擎的结构和工作原理的介绍,说明工作流引擎不仅可以满足对企业业务流程的控制、管理机动化的要求,还为系统提供一系列的应用程序的接口,给以后系统升级减小了设计难度和成本。

1 理论基础

工作流是指两个及以上的人员,为了共同目标,以某种方式(串行、并行、选择等)连续去完成某一业务活动。根据工作流管理系统(Workflow Management System,WfMS)在1994年发布的工作流的参考模型和工业标准,基于工作流技术的协同系统实际是一个软件系统,它不是企业的业务管理系统,而是一个为业务系统运行提供的支持环境。

基于工作流技术的协同系统中,工作流引擎(Workflow Engine)是核心,它是系统组成的一部分,在不同的业务环境中,根据角色的优先级、分工和条件的不同传递信息,并且提供核心解决方案。在某种程度上工作流引擎掌控着系统资源的分配权。根据轻量级工作流引擎的功能特征,其架构模型如图1。

2 工作流引擎的设计

根据文献[3]中对工作流引擎体系结构的讨论,本文工作流引擎主要包括三个部分:机构模型、信息模型和控制模型,前两者总称为工作流引擎的数据模型。它们三者之间的逻辑关系如图2。

2.1 数据模型

工作流引擎的数据模型包括机构模型和信息模型。机构模型构建的基础是企业或者部门的组织结构,信息模型则是定义企业业务流程运转中的各种相关数据。通过统一的关系结构定义的数据模型,很清晰描述了业务流程的运转条件,人员之间的约束以及业务内的依赖关系等特征。

机构模型定义了系统中的实体,包括部门、人员职能以及其间的逻辑关系,并且通过对角色、职能的权限约束来控制人员对系统资源的访问。在业务流程中,机构模型提供了协同工作的角色和工作组。图3为机构模型的核心E-R图。表User与表Dep分别储存了企业人员关键信息和企业部门的组织体系结构;表DepType定义了部门分类,制定了部门的优先等级;表Role和表Relation对人员与职能的关系进行了关联与约束。通过表间的逻辑关系,使人员与部门、角色与职能之间映射关系得以清晰体现。一部门可以有多人员,多职能,但至少有一人员,一职能;一人员可以属于一或多部门,并且拥有一或多职能。这种映射就可以完成一人一岗、一人多岗等不同的实际行政任命的处理。通过对机构模型中的部门、人员、职能以及其间关系的定义,使企业组织呈现树形结构,也为企业使用“矩阵管理”提供了支持。表Role中对角色的单独定义,使得角色这一业务流程中的重要部分成为较为自由的部分,即可不受具体的组织部门的结构约束。在实际业务的流程中,可根据业务流程定义的需求来定义角色的任务,所属的部门、职能以及权限的分配。角色的概念在机构模型的引入,进一步降低了机构模型的建模难度,提高了人员的利用率。

信息模型定义了业务流程模板(名称、参与人员、规则、约束等),提供了协同工作的工作流引擎运转的各种相关信息,即信息模型是业务规则和流程活动的表示。图4为信息模型的核心E-R图。其中,流程定义和流程实例这两类数据是信息模型的主要部分。表Flow和表Flowmodel记录了业务流程的基本信息,如业务的编号规则、处理时限、参与部门与人员等;表Flowstepmodel存储了业务流程节点信息,如节点类型(起始节点、终止节点、等待节点、处理节点)、逻辑判断等;表FlowProc和表FlowLink分别定义了流程节点的处理方式和节点间的连接规则。它们定义了业务流程的所有活动的依次顺序,即描述了流程中的前后活动以及推动流程运转的条件,将整个业务流程结构网络化,以便于业务信息在工作流引擎中的流动、控制。以上表单属于流程定义数据,这些数据保证了业务在系统中的规则运转,避免了流程混乱,人员分工不明带来的资源浪费、效率低下。表FlowExample记录的是业务流程的实施实例信息,包括流程编码、流程创建人员和时间、实例当前运行状态等;表FlowTask和表FlowTaskLink分别存储的是流程活动列表和活动之间的相互关系,它们保证了业务流程在实例化运行中遵循流程定义规则、约束。以上表单属于流程实例数据,即业务流程实例化内容。在工作流引擎的一次业务流程实例化过程中,涉及的相关业务活动都将被记录在流程实例数据表单中。每一次的记录表示业务信息在相对应流程节点的一次流转,包括该节点的处理人员、处理时间、处理状态等信息;每一次的流程实例化的具体流转过程将形成一条对应业务链被存储,便于系统的跟踪。

2.2 控制模型

控制模型是工作流引擎的控制核心。它将数据模型中的两大部分(机构模型、信息模型)整合起来,通过数据模型中对业务活动和业务规则的定义来协调、控制业务流程的流转等任务。

引擎控制器作为基于工作流引擎的协同系统的调度中心,统一对数据模型进行管理,并向系统外部应用提供一系列服务,包括流程控制、权限分配、资源管理等。图5是引擎控制器的体系结构图,下面就几个主要部件进行分析。

调度中心(即控制中心)从外部应用接口接受业务流程的请求,如流程开始、流程权限开启等,然后由不同的请求调用对应的模块进行处理相关数据并返回结果。而处理的有关数据存储在DBMS中,随时供工作流引擎使用。实际上,由于数据的独立性和不相关性,调用中心可以完成多线程的并发处理,同时处理多流程的任务,提高协同工作效率。

任务管理主要根据调度中心的引导处理流程节点的工作,如节点处任务的指向、状态以及相关数据的存取等。当流程任务通过任意节点时,调用中心通过节点返回的任务信息、状态指示任务接下来的活动(等待、停止、继续等),已完成系统对流程的实时管理。

任务指派在流程实例从前一流程节点转出到下一流程节点时发生,向表FlowTask记录流程实例当前任务状态时,采用任务指派策略获取下一节点的处理人员,以保证系统资源的最优化。

权限分配保证了用户遵守机构模型和信息模型制定的的规则对系统功能和数据进行合法访问,在系统实现中权限分配主要体现在用户界面元素的生成、表单的访问的控制和流程实例的执行控制[4]。在数据模型中,表User与表Role在表Relation的规则下将指定不同部门、不同职能的用户获取相应的权限。

3 轻量级工作流引擎的应用分析

以商业银行进行分析,所涉及的业务很复杂,包括资产业务、负债业务、中间业务和表外业务四大类,其中各种关键业务更是种类繁多。在这些业务中,一般涉及的部门比较广,人员比较多,整个活动链比较长。如个人商务贷款业务主要的业务活动就超过11项,业务活动发生既有串行关系,也有并行关系,大部分包括选择、循环,而且活动间的依赖关系紧密、复杂。本文所讨论的面向协同工作的工作流引擎高效稳定、安全可靠,并且适应性强,可以满足这类应用对象的柔性系统需求。

4 结束语

工作流引擎作为协同系统的后台核心组件,对工作流引擎的设计和实现是协同系统功能实现的关键所在。基于工作流引擎的协同系统现以在各个领域广泛应用,解决了企业业务中的资源浪费,分工不明确,效率低下等众多问题。

本文为例的面向协同系统的轻量级工作流引擎模型基本满足中小企业的业务发展需求,但是还有许多需要改善和提高的地方,如系统功能的可视化、各种外部应用接口、事务支持以及协同工作平台的无缝化结合等等。

参考文献

[1]黄钰棠.大型多人线上角色扮演型游戏中团队合作过程之资讯察觉研究[D].台湾:国立交通大学传播研究所,2007.

[2]何清法,李国杰,焦丽梅.基于关系结构的轻量级工作流引擎[J].计算机研究与发展,2001,38(2):129-137.

[3]Karl R P H Leung.The Liaision Workflow Engine Architecture[C].Proc of the 32nd Hawaii Int'l Conf on System Sciences,Hawaii,1999.http://www.computer.org/proceedings/Hiccs2/.

基于规则引擎的工作流系统设计 篇8

工作流管理通过对企业业务过程中的内在逻辑关系进行建模,并提供相关的运行环境,实现企业业务过程重组、过程管理与过程自动化。由于现实生活中企业业务规则在时间、因果等关系上的灵活性和不确定性,实现有效工作流管理的一个关键问题是提高工作流管理系统的适应性。如今,在许多基于Web的应用领域中,都存在着对推理引擎的需求,如基于Web的专家系统、联机分析系统、数据挖掘系统、智能搜索引擎等。如果能够开发一个开放的、对象化的、基于Web的推理引擎,势必会节省大量的重复开发工作,从而促进基于Web的智能软件开发及发展。这里设计一种基于Java规则引擎(Rules Engine)的工作流框架。

1 基于规则的专家系统(RBES)

规则引擎则是基于规则的专家系统的一部分。为了更深入地了解Java规则引擎,下面简要地介绍基于规则的专家系统(RBES)[1]。RBES包括3部分:Rule Base(Knowledge Base),Working Memory(Fact Base)和Rule Engine(推理引擎),其结构如图1所示。

图1中,推理引擎包括3部分:模式匹配器(Pattern Matcher),议程(Agenda)和执行引擎(Execution Engine)。推理引擎通过决定哪些规则满足事实或目标,并授予规则优先级,满足事实或目标的规则被加入议程。模式匹配器决定选择执行哪个规则,何时执行规则;议程管理模式匹配器挑选规则的执行次序;执行引擎负责执行规则和其他动作。与人类的思维相对应,规则引擎存在两种推理方式:演绎法(Forward-Chaining)和归纳法(Backward-Chaining)。演绎法从一个初始的事实出发,不断地应用规则得出结论(或执行指定的动作);归纳法从假设出发,不断寻找符合假设的事实。

Rete算法[2]是目前效率最高的一个Forward-Chaining推理算法,绝大多数Java的推理引擎都采用这一算法。规则引擎的推理步骤:

(1) 将初始数据(Fact)输入工作内存;

(2) 使用模式匹配器比较规则(Rule)和数据(Fact);

(3) 如果执行规则存在冲突(Conflict),即同时激活多个规则,将冲突的规则放入冲突集合;

(4) 解决冲突,将激活的规则按顺序放入议程;

(5) 使用规则引擎执行议程中的规则。重复步骤(2)~(5),直到执行完所有议程中的规则。

2 Java Rule Engine API规范(JSR-94)

2003年11月,Java社区通过了Java Rule Engine API规范(JSR-94)的最后草案。它是由javax.rules包定义,是访问规则引擎的标准企业级API。Java规则引擎API允许客户程序使用统一的方式和不同厂商的规则引擎产品交互,就像使用JDBC编写独立于厂商访问不同的数据库产品一样。Java规则引擎API包括创建和管理规则集合的机制,在Working Memory中添加、删除和修改对象的机制,以及初始化、重置和执行规则引擎的机制[3]。图2给出基于规则引擎 的工作流管理系统。

3 基于Java规则推理的工作流应用框架

3.1 工作流应用框架

按照WFMC的定义[4],工作流的概念被概括为“业务过程的部分或全部在计算机应用环境下的自动化”,它所要解决的主要问题是“在多个参与者之间按照某种预定义的规则传递文档、信息或使任务的过程自动进行”, 从而实现某个预期的业务目标,或者是促使该目标实现。该工作流应用框架采用面向对象的方法和组件化的架构设计,系统采用组件模型和Java编程技术,并完全基于J2EE平台的规范设计和构建。该工作流平台的核心模块是工作流引擎。工作流引擎包括3个核心组件:工作流对象、工作流路由器和规则引擎。1个工作流实例由一组相关的工作流对象代表。工作流对象中封装了工作流的相关数据,每一个工作流对象都有1个关联的应用对象,应用对象中封装了相关的应用数据[5]。

工作流路由器是工作流引擎的心脏,其功能是推进工作流实例执行。工作流路由器把每个工作流对象在合适的时间传递到合适的队列中。规则引擎是工作流引擎的大脑,其功能是根据已经定义好的工作流规则,一个工作流对象以及与它关联的应用对象当前所处的状态,决定这个工作流对象的下一个队列[6],该规则引擎引入了一个基于Rete算法的Java规则引擎。

图3所示是工作流对象、工作流路由器、规则引擎、应用对象和应用程序之间的关系。应用对象与工作流对象之间的关联是在创建工作流对象时动态建立的。工作流路由器仅传递工作流对象,不涉及与工作流对象关联的应用对象。应用程序只是对应用对象进行操作,与工作流对象无关。这是该工作流引擎保持其通用性的关键,规则引擎提供的动态绑定功能,进一步增加了工作流引擎的灵活性[7]。

3.2 Drools开源项目

目前,支持JSR-94规范的产品中最为成熟且又免费的是Drools[8]。Drools是一个Bob McWhirter开发的开源项目。Rete算法可实现一个增强的Java语言。Drools利用XML和Java就可以实现规则引擎的强大功能,具有很好的应用前景,目前已发表了2.0-beata-14版。Drools提供了3种语义模块——Python模块、Java模块和Groovy模块。Drools项目的规则文件为自定义格式,由一个XML语言定义的基本语义模块加上Java(Groovy或Phython)语义模块组成。开发者也可以根据需要定制自己专用的语义模块。每一个规则文件包括一个惟一的规则集,规则集包括一个或多个规则,每个规则包括一个或多个参数。这些参数用于在规则的条件中进行判断和执行相应的操作,参数对应的是一个Java类,Drools会在创建工作内存的时候把它自动实例化,每个规则包括一或多个条件以及一个最后的操作。

下面通过一个简化的电信资费优惠处理模型,说明Drools在实际中的应用。电信公司为了吸引顾客,经常会推出各种资费优惠套餐计划,这些优惠措施包括打折、固定折扣(消费满一定额度返还一部分固定费用)等。现假设存在以下优惠规则:

(1) 长话费超过200元的用户,超出部分长话费优惠20%;

(2) 上网费超过200元的用户,市话费减免50%,但最多减免50元。

即使就这么2条简单的规则,如果直接编程实现也将是一大堆if语句,既不容易实现,更难以维护,利用Drools可实现这些规则。相应的规则文件charge.java.drl具体内容如下[9]:

<!--费用优惠规则集,导入规则集需要的类--->

<rule-set name="charge discount">

<java:import>Charge</java:import>

<java:import>java.lang.Integer</java:import>

<!--优惠规则1,优惠条件:长话费超过200元的用户-->

<rule name="rule1">

<parameter identifier="a">

<class>Charge</class>

</parameter>

<java:condition>a.getPrimCharge("chf")>200</java:condition>

<java:consequence>

Integerdis=newInteger((a.getPrimCharge("chf")-200)*(-0.2));

a.addDisc("discount1",dis);

</java:consequence>

<!--优惠规则2,优惠条件:上网费超过200元的用户-->

<rule name="rule2">

<parameter identifier="a">

<class>Charge</class>

</parameter>

<java:condition>a.getPrimCharge("swf")>200</java:condition>

<java:consequence>

Int idis=a.getPrimCharge("shf")*0.5;

if(idis>50)idis=-50;

else idis=-idis;

a.addDisc("discount2",new Integer(idis));

</java:consequence>

</rule-set>[10]

最后调用这些规则,生成的代码非常简单。

4 结 语

从前面的讨论可看出,采用开源项目——Drools 规则引擎,能够有效地分离业务规则与基本技术,对业务规则的改变只需改变XML文件而不需要修改工作流引擎,从而为工作流管理系统处理商业复杂多变的业务规则提供了一种解决方案。可以预见,随着Java规则引擎工具的不断成熟,这一技术必将被越来越广泛的应用,成为解决实际工程中复杂业务规则问题的有力工具。

参考文献

[1]N.Alex Rupp.A Intruduction to The Drools Project[A].http://www.theserverside.com/tt/articles/article.tss?l=Drools,2004.

[2]郭芳,白建军.基于Rete算法的规则引擎JBoss Rules[J].计算机时代,2008(1):12-14.

[3]张宇,陈德礼.Drools规则引擎应用分析[J].福建电脑,2007(10):15-16.

[4]范玉顺.工作流管理技术基础——实现企业业务重组、过程管理与过程自动化的核心技术[M].北京:清华大学出版社,2001.

[5]邬少飞.Service-based Flexible Workflow System for VirtualEnterprise[J].Journal of Chongqing University:English E-dition,2008,3:73-76.

[6]Zhang Ye,Zhe Jiang.A Technical Support to Integrated Lo-gistics Strategytr Ansform:Distributed Workflow Manage-ment System[A].第十四届工业工程与工程管理国际会议[C].2007.

[7]Wil.工作流管理——模型、方法和系统[M].王建民,译.北京:清华大学出版社,2004.

[8]朱先飞.Drools在电信网络开通系统中的应用及其改造[J].广东通信技术,2007(11):10-12.

[9]任忠保,张艳晶,李立亚.基于Drools的策略体系设计[J].计算机安全,2007(8):64-66.

工作流程引擎 篇9

关键词:工作流引擎,微内核,WebService

近几年,越来越多的企业开始认识到需要有支持设计开发和执行业务处理流程的高级工具,业务流程问题成为目前管理信息系统开发中的突出问题,管理信息系统需要实现对工作流程的定制和控制的支持,以支持业务流程的灵活变化。管理信息系统的不足可用工作流技术的优势来弥补。

工作流是一种能够完全或者部分自动执行经营过程,它根据一系列过程规则,文档信息或者任务能够在不同的执行者之间进行传递与执行。将工作流技术应用到管理信息系统中去,可以给管理信息系统带来新的活力。工作流管理系统是定义、创建、执行工作流的系统。能提供以下三个方面的功能支持:建造功能(对工作流过程及其组成活动定义和建模);运行控制功能(在运行环境中管理工作流过程,对工作流过程中的活动进行调度);运行交互功能(指在工作流运行中,系统与用户及外部应用程序工具交互的功能)。工作流管理系统运行在一个或多个工作流引擎上,这些引擎解释对过程的定义,与工作流的参与者相互作用,并根据需要调用其他的IT工具或应用。工作流相关基本概念如图1所示,可以从中了解各概念间的联系。一般来说,一个具体的工作流管理系统实现中的难点主要集中在以下两个方面:①过程建模;②工作流引擎内核。本文主要对于工作流引擎展开研究。文中就是从工作流引擎概念出发,给出了一种为内核型的引擎模型,在此基础上给出核心调度算法,然后进行了Java实现,提出需要进一步研究的问题。

1 相关技术

1.1 工作流引擎

工作流管理系统的核心部分是工作流引擎,引擎是驱动流程流动的主要部件,它负责解释工作流流程定义,创建并初始化流程实例,控制流程流动的路径,记录流程运行状态,挂起或唤醒流程,终止正在运行的流程,与其他引擎之间通讯等工作。

一个工作流管理系统可以包含一个或多个引擎,并通过API向外部提供五个方面的功能服务,这些功能分别为:接口1—流程定义的导入导出;接口2—同客户端应用程序和工作列表处理程序之间的交互;接口3—软件工具和应用程序的调用;接口4—不同工作流管理系统之间的协同工作;接口5—管理和监视功能。

通过这五个接口,工作流管理系统可以同外部的软件工具进行交互。这五个接口一般通过API的形式提供给用户或软件开发商,以简化开发难度、降低成本并提高效率。

1.2 微内核

微内核(micro kernel)这个概念最早是由Richard Rashid提出的,虽然这个最初是为了构建基于消息传送机制的微内核操作系统,并不是为了软件构架服务的。随着“构件化”“分层”软件体制的发展,微内核技术和构建思想逐渐被引入到软件设计构架中,用于“尽可能的解耦组件之间的关系”。

微内核引擎的原则,就是尽量将“引擎所需的服务”与“引擎内核调度计算”剥离。将Engine Kernel部分尽量“疏剪”,尽可能将“一些处理操作”放置于外围扩展。微内核引擎的体系结构如图2所示。

“微”内核有两层含义:

(1)支持功能简单:仅处理最核心的过程调度相关的功能。也就是说,当有一个节点完成的时候,这个过程引擎的内核,能够准确的依据已经过程定义,并按照事先构造的调度算法和机制,来计算下一个需要执行的节点。

(2)实现结构简单:没有太复杂的实现,但都会有几个最基本的对象体。

1.3 Web Service

Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络中被描述、发布、查找以及通过Web来调用。

Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。它可以使用标准的互联网协议,像超文本传输协议HTTP和XML,将功能体现在互联网和企业内部网上。Web Service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。

基于Web Services的工作流引擎有显著优点。主要集中在以下几点:①对异构环境的支持;②标准化程度高;③高柔性;④互操作性好;⑤引擎结构简单清晰;⑥可维护性和可扩展性好。

2 核心调度算法

把工作流引擎设计为微内核,其目的是灵活,开发成本低。所以其基本功能是负责活动的调度,引导流程流向。

2.1 数据结构

因为核心调度算法主要是活动的调度,而活动又有着不同状态,可以将活动分为三个类型,即初始态(Initialized),激活态(Activated),完成态(Finished)。所以在系统中采用最为简单的线性表作为数据结构。

在使用核心调度算法前需要创建活动实例,而活动实例是在创建流程实例时创建的。活动实例被创建后其状态是初始态,将它们顺序装入初始活动列表,此刻便可以调用核心调度算法。

2.2 调度算法

调度算法描述如下:

(1) 扫描激活队列。

(2) 取出队列中的活动。

(3) 如果手工活动,则发送到相应的工作项列表。

(4) 等待返回信号。

(5) 如果是结束活动,则跳出循环,并从激活队列中删除该活动。

(6) 如果是子流程活动,则判断它与主流程之间的关系。

(7) 如果是同步的则将主流程挂起,等待子流程完成发出通知。

(8) 否则将子流程活动置为完成状态,并插入完成队列。

(9) 否则从激活队列中删除该活动,并将该活动直接插入完成队列,并修改活动的状态。

(10) 扫描完成队列。

(11) 取得一个活动。

(12) 查询下一节点,得到一个向量。

(13) 若不为空。

(14) 则扫描该向量,取出活动实例,判断活动类型。

(15) 若为非路由活动就加入激活队列,删除已完成的活动。

(16) 否则,调迁入函数,迁入函数计算结果为真,则插入激活,删除完成的活动。假,则等待。

核心调度算法是引擎内核的主要组成部分。通过核心调度算法,引擎可以根据建模工具给出的流程信息,按照一定的逻辑条件,驱动流程的流动。核心调度算法完成了工作流引擎调度活动,引导流程流向的核心功能。

3 Java实现

本文中只是对于当调度活动类型为手工活动的情况给出Java实现,而对于子流程及路由节点的判断由于篇幅原因在此不予给出。

4 结束语

目前,在管理业务流程应用中,如何保证工作流程调度的正确性,优化工作流引擎结构,改进调度算法,是急需解决的难题。在分析了工作流引擎的功能基础上介绍了微内核概念,设计了基于Web Service的工作流引擎模型。与传统的工作流引擎相比,它更具有灵活性,而且可扩展性也较好。今后,将准备对于资源的合理利用以及案例执行过程中的一些性能指标等方面加以完善。

参考文献

[1]罗海滨,范玉顺,吴澄.工作流技术综述[J].软件学报,2000,11(7):899-905.

[2]范玉顺,吴澄.工作流管理技术研究与产品现状及发展趋势[J].计算机集成制造系统,2000,6(1):1-7.

[3]Workflow Management Coalition.Workflow Management Coalition Ter-minology and Glossary[S].Technical Report.WfMC-TC-1011,Brus-sels,1996:34-56.

[4]阎新庆,李文峰,陈定方.Web服务的体系结构和应用[J].武汉理工大学学报,2002,24(5):28-31.

[5]褚红伟,葛玮.基于Web Services的分布式工作流的研究与实现[J].计算机应用研究,2005,22(8):96-99.

[6]胡长城.微内核工作流引擎体系结构与部分解决方案参考[EB/OL].http://www.javafox.org.2005.

[7]Wang Shuying,Shen Weiming,Han Qi.An agent-based Web servicesworkflow model for inter-enterprise collaboration[J].Expert Systemwith Application,2006,22:118-128.

一种基于工作流引擎的系统设计 篇10

工作流就是:“在一个工作群组中, 为了达成某一个共同目的而需要多人协力以循序或平行工作的形式来共同完成的任务”, 为了实现对业务过程的工作流管理, 需要有相应的软件系统的支撑。此种软件系统我们就称之为工作流管理系统。

为了做好工单流转, 我们基于工作流引擎开发了工单系统。该系统功能结构图见图1。

现对工作流引擎做一个简单介绍。

2 流程管理

2.1 子流程嵌套

如图2, 当主流程激活子流程后, 主流程暂停运行, 等待子流程结束后才能继续运行。主流程激活子流程时, 主流程的数据 (流程变量) 必须能够传递到子流程中, 当子流程结束后, 也必须能够将数据 (流程变量) 传递回主流程中 (见图2) 。

2.2 流程回退

如图3所示, 流程回退指的是流程回到起点重新发起的功能。无论流程的当前节点在什么位置, 流程回退总是回到流程的第一个任务节点 (见图3) 。

3 任务管理

3.1 任务新建

任务新建是指用户从权限范围内选择某一流程创建一个任务实体, 并且自动拥有第一步骤的主办权限, 填写处理表单信息和处理意见, 选择后继处理人员后可转派任务。允许用户选择立即办理或者是保存返回。有创建该流程的历史记录, 提供快速创建新任务的功能或者是创建任务的向导。立即办理默认任务认领完成。

3.2 任务认领

任务认领是指用户主动领取系统分配给自己的任务, 任务认领之后方可进行任务处理;未认领的任务状态为“待认领”状态, 已认领的状态为“处理中”;流程管理员可设置任务认领时限及催办动作。

3.3 取消任务认领

取消任务认领是指用户对已认领的不属于自己职责范围的任务或误领的任务进行撤销认领的功能。

3.4 任务委托/代理

任务委托是指用户将日常工作委托给其他用户代理执行的功能。委托分为两种类型: (1) 是流程委托, 即委托人指定待委托的流程模板, 则该流程模板产生的所有需要该用户处理的任务均委托给代理人处理; (2) 任务委托, 即委托人可指定具体流程模板中的部分任务节点进行委托, 除此之外其他任务仍由委托人自己处理。用户可以设置委托的生效时间和失效时间。任务委托的要素有:委托时间、委托人、代理人、目标流程、目标任务、生效时间、失效时间。

3.5 任务转发

任务转发是指用户将系统分配给自己的任务转发给其他用户处理的功能。任务转发的要素有:被转发任务、转发人、转发时间、目标责任人、转发意见、最终处理人。

3.6 任务回退

任务回退分为普通节点回退和分支节点回退, 如下图所示。

(1) 普通节点回退。

如图4, 任务B至任务A有两条有向连接线, 其中蓝色箭头表示正常发送, 红色箭头表示被退回。流程模板中不包含红色箭头引擎提供回退接口实现任务的回退功能 (见图4) 。

(2) 分支节点回退。

如图5, 当任务D回退时, 流程不是回退至任务B和任务C, 而是回退到任务A。另外, 任务B或任务C回退时, 无论另一分支的状态如何, 均回退至任务A (见图5) 。

3.7 任务回收

任务回收是指用户收回已正常发送的任务重新处理的功能。

3.8 任务催办

任务催办是指用户在规定的认领时限或处理时限内未做相应处理时, 系统自动触发催办事件, 并执行相应的催办动作的功能。

3.9 任务抄送

如图6所示, 当任务A执行完毕后, 会继续执行主流程上下一个预定任务B, 同时也会激活另一个任务C的执行, 但是任务C不会对主流程的运转造成影响 (见图6) 。

3.10 任务关注

任务关注是指用户把某项任务加入到自己的“收藏夹”, 用户可以在系统中通过查询的方式快递查看被关注的任务的进展情况和状态等, 并且被关注的任务发生状态的变态时向关注者发送任务变态信息等。任务被关注后系统向任务的主办人和经办人等发送任务被关注的提示信息。

3.11 任务查询

任务查询是指用户选择指定的查询条件后对权限范围内的任务进行查询。对查询出的任务在权限范围内可进行关注和点评操作。通过点评操作, 有权限的用户可以对名状态下的任务进行意见的点评, 并显示在任务处理流程中。

3.12 任务事件管理

系统支持各种常用任务事件触发机制, 用户可添加或删除指定任务的系统事件, 并指定事件触发时处理的动作。任务事件包括任务创建、任务认领、任务完成、任务取消、任务回退、任务催办等。引擎需支持异常处理, 用户可设置事件动作是否屏蔽异常。当执行事件动作产生异常时, 引擎将会将流程状态回滚到触发事件前的状态。比如, 如果响应“任务完成”的动作脚本出现异常时, 对应的任务会保持未完成状态。在某些情况下 (如在任务生成时发送短信或Email通知任务执行人) , 我们并不需要在动作脚本发生错误时回滚流程状态, 此时可以选择屏蔽异常选项, 引擎将忽略脚本产生的异常。

4 业务开发流程

为把业务与工作流引擎剥离开来, 我们设计了典型的开发流程如图7所示。

4.1 过程设计和定义

需求开发人员根据用户需求整理业务过程, 并进行过程分析和建模;通过GUI工具创建业务流程模板。

4.2 流程实例化及控制

流程参与者通过业务系统或管理工具, 向核心引擎发起创建和管理流程的请求, 实现流程的实例化及控制。

4.3 过程修改

业务系统在运行过程中可以对现有流程进行优化修改, 实现流程模板的版本升级功能。

参考文献

[1]Workflow Management Coalition:The Workflow Reference Model (WFMC-TC00-1003 Issue 1.1) , 1995.

[2]Workflow Management Coalition:Workflow Management Coalition Ter-minology and Glossary (WFMC-TC-1011 Issue 3.0) , 1999.

[3]David Hollingsworth:The Workflow Reference Model:10 Years On, Workflow Handbook, 2004:295~312.

[4]范玉顺.工作流管理技术基础[M].清华大学出版社, 施普林格出版社, 2001.

[5]Foudation for Intelligent Physical Agents.FIPA Abstract Architecture Specification, 2002.

[6]M Wooldridge.Intelligent Agents:Theory and Practice.Knowledge En-gineering Review, 1995.

[7]何炎祥, 陈莘萌.Agent和多Agent系统的设计与应用[M].武汉大学出版社, 2001.

[8]顾君忠.计算机支持的协同工作导论[M].清华大学出版社, 2002.

杀手的极致引擎 篇11

在本次的游戏访谈中,我们请来了IO的技术总监Martin Amor,他透露了IO做出这个决定的原因,以及其中涉及的因素——比如为了满足设计团队的需求,以及用更强大的人工智能(AI)来实现更富有电影感的游戏体验。

让一款游戏引擎支持多种目标一直是最具挑战性的任务,此外要为引擎设置哪些功能,以及如何实现这些功能,其中涉及的决策过程同样不轻松。在这次访谈中,Amor将为我们一一解答这些过程,并且解释他们的游戏团队希望用《杀手》来突破哪些障碍,以及这些决策将会如何影响未来的引擎技术,甚至是IO团队的命运。

《杀手5:赦免》是这次引入新引擎的处女作吗?

Matin:正是这样。我们已经在这项新技术上花费了不少时间,所以这次的新作让我们感到非常非常的兴奋。

本质上来说,《杀手5:赦免》一开始就是野心之作,所以我们都觉得,OK,我们绝对要在这次端出具有颠覆意义的技术,来实现我们的抱负。所以我们便开始着手Glacier 2的建设。虽然Glacier 1已经用到了我们早前的游戏中,但Glacier 2 有完完全全的新模式,是从底层重新建立起来的。

实际上这一阶段的次世代已经延续了很长时间,为什么会在这个节点上启用全新引擎?而且距《杀手47》在XBOX 360上发布已经过了6年时间。

Matin: 新引擎的制作决定是在公司许许多多的决定当中非常重大的一部分。在发布这款引擎前,我们已经预想了未来游戏业的状况,并尽力让它能够适用于未来的开发,所以我们在这一点上自然做好了充分的准备,包括面对未来的主机。

当然就目前的主机而言,我认为我们仍未对已有资源进行充分挖掘。这里还有可以做的事,我们还能继续提升现有的性能。我们一直在对PS3的各模块进行手工代码开发,以确保硬件性能被完全释放出来。但这当中存在一个平衡性的问题,比如开发进度和投入成本之间,以及最终到底能够实现多少性能的提升等等,但这里无疑还有很多值得去做的事。

我们之前也曾和其他开发者谈到过AI的问题。我的感觉是和大家最初的预期相比,这一代主机的AI进展似乎不怎么给力。

Matin:AI很复杂,就我观察到的许多游戏来说,现在大家正在挑战的领域,并不是那么强调智能化,而是更强调写实效果,这样就能在游戏中模拟更多更复杂的行为。

我们在《杀手》中希望尝试的也是尽量达到角色间的平衡,这很重要,因为这样才能让各个节点互相连接起来。比如说一个警察,听到了一声枪响,另一个警察看到地上放着一支枪,第三个警察则看到玩家正在逃跑,他们要能把这些事件联系起来,从中察觉到正在发生的事情,并且做出合乎常理的反应。

但实际上编写AI的核心代码并不是最困难的部分,而是怎样才能让AI合乎常理地展开行动。所以如何协调角色之间的动画和对话,如何让他们在地图里行动,并且看起来像是真正的人物角色,避免诡异谷之类的事情发生。实际上不少开发者在着手开发后,才会吃惊地发现要做到这个程度真的很难。

Tip|《杀手》(Hitman)系列游戏:

丹麦游戏公司IO Interactive开发的第三人称射击类游戏。从2000年开始,整个系列游戏分别推出了《杀手:代号47》(2000)、《杀手2:沉默刺客》(2002)、《杀手3:契约》(2004)、《杀手4:血钱》(2006)、以及预计今年发布的《杀手5:赦免》。

Tip|诡异谷:

因为AI或电脑图像模拟得不恰当或失真而产生的玩家心理反应。当诡异谷现象发生时,玩家或观众会本能地认为“现实世界中根本不会,或者不存在这样的东西”,进而对游戏产生存在感危机。诡异谷是游戏厂商十分担心的心理现象,因为这种类似“出戏”的体验, 会大大降低游戏乐趣。

看起来这是开发中最需要相互照顾的环节了。是否可以说在AI的参与下,美术、声效等等环节全都被统一到了技术,以及角色行为的具体节点中?

Matin: AI更像是在整个开发链的末端,是吧?所有开发者所做的每件事,都是为AI提供原料。AI程序员要面对角色、动画、声效,还有特别是音乐,音乐同样是这次Glacier 2引擎所涉及的很重要的部分。

比如这次我们开发了一个非常动态的音乐系统。基本上来说,这次的音乐系统会去配合AI,理解正在发生的情况,并由此播放音乐,包括声效、过场情节、以及其他种种。是的,你说得很正确——这是开发中最难的地方,在AI编程上,我们遇到了非常多的麻烦。

就像是游戏中所有元素的合成者?

Matin:是的,这里面也有很多乐趣。有的AI程序员会对我说他们感觉自己像是站在电脑这边,专门和玩家对着干。我觉得他们正好乐在其中。但同时,他们又必须关注如何为玩家创造有趣的游戏体验。

Glacier 2引擎在多大程度上是专门为《杀手》设计的?又有多大程度是希望成为更全面的开发引擎?

Matin:我们的引擎是分层设计的。我们有基础引擎层,这其中包括所有系统元件,所有的I/O控件。我们还有一个被称作“风格类型”的层,这个层专门服务于特定类别的游戏,比如第三人称冒险射击类,像《杀手》、《古墓丽影》等等。之后我们还有特定的游戏层,这个层会专注于《杀手5:赦免》这样特定的游戏上,但同时也会让其他游戏的制作变得方便。

也就是说整个引擎是由不同层级的模块构成的?

Matin:当然,就是这样。

你刚才提到了《古墓丽影》,这是一款曾经被好几家工作室经手的系列,甚至在同一家工作室,也有过不同引擎的更迭。在你看来,未来的《古墓丽影》系列还会发生哪些变化?

Matin:《古墓》和《杀手》都曾经使用过两款引擎。Crystal Dynamics有他们自己的引擎,我们这边(IO)也有自己的引擎。从公司的角度来考虑,我想这大概是不希望把鸡蛋都放在一个篮子里,不过这其实并不是我掌控的范畴。

对于IO而言,你可以把我们的两款引擎看做植根于同一条DNA链,假如没有坚持研发我们自己的技术,我不认为《杀手5:赦免》最后会成为我们所期待的样子。也只有这样,我们才能在复杂的开发环节以及各种技术上,完全掌控我们自己的游戏,这一点非常重要。

看起来公司也很支持制作工作室拥有对技术的决定权。

Matin:是的,这让整个开发变得很给力,因为我们可以自由地做自己真正想做的游戏,这层逻辑也同样植根到了引擎当中。

Glacier 2引擎关注的一个核心点是为开发人员提供最好的工具和流程,开发者可以用这款引擎重制许许多多的游戏内容。比如在《杀手》里,你可以在一个关卡里尝试各种各样的游戏方式,以及许许多多弹出的内容,对于开发者来说,植入内容、制作特效动画,以及高速快捷地重復运行这些步骤,这就是开发的要义所在。

实际上,开发人员在运行的游戏当中就能改变所有事情,他们可以重新制作动画、改变贴图,而同一时间在PC、PS3、XBOX上,整个游戏就随之实时地改头换面了,这一点对我们来说非常重要。

这些工具有哪些是置于游戏层上的?还是说所有的工具都分布在不同的层上?

Matin:当然,一些工具是直接运行在游戏层上的。比如说AI调制器,这是一个非常非常强大的工具——其实我很想演示给你看。

比如说在进行游戏时,你可以点击任何角色,然后就可以看到一条时间轴。你可以拉动这条时间轴,就可以看到这个AI角色的所有行为、所有的动画过程,只要播放这个角色,你就可以得出这个线索当前引出的情况,并且很快看到其他相关角色的状态、视角,诸如此类。

这个调制器就是放在游戏层上的,但在某些时候,它也可以被下放到风格类型的层上。这可以提供很多益处,比如我们的AI程序员可以就此制作程序插件,游戏编程员也可以就此制作插件,以及其他各种适合他们使用的小工具。

《杀手》系列有很多特点、很多细节,列比如讽刺味和幽默感。所以你们需要这创个工具,比如这个AI调制器,去保证实手现这些特别的风格?

Matin:我想你说得完全正确。实际上,《杀手》应该是一个风格严肃的游戏,因为我们讲的是一个以为钱而生的职业杀手,这个主题本身并不轻松。所以我想在IO,大家是希望把味道做得更好,让不轻松的事看起来轻松一些,更有黑色幽默的味道,于是就有了一些很奇特的,带着漫画风格的人物情节。

你是如何建立这种风格实现的基础的呢?

Matin:这又要归结到多功能的基础AI上了, 一个可以处理各种不同情况,为角色创建各种行为的基础AI。从敌人的行动到近身战、远身战,以及AI需要向玩家传递的信息等等。

我们有一个经常要用到的,叫做序编辑器的工具,通过它可以在游戏里建许多细小的情节。比如玩家带着杀跑到某处角落,于是AI会对此作出反。比如在这玩家属于非法入侵,AI角色就会走上去说,“嘿,这里禁止入内。”如果玩家仍停留在那,他就会说“嘿,我警告你,这不准有人,滚开!”

如果这时玩家还是留在原地,他就会掏出枪说,“最后警告,再不离开,我就开枪了!”我们在游戏里加入了很多类似情节,很多类似的AI行为。这样玩家就有时间去做决定,重新想想他该做什么。

在早前,你曾说Glacier 2专注的一件首要的事,是视觉效果。视觉可以指很多层面,那么你最在意的是哪一点?

Matin:对我们来说,为游戏的艺术风格提供支持是最重要的——所以我们采用了很多动态光照。我们用的渲染器是全延迟的,许多动态光照、动态阴影,以及后期特效、后期滤镜,所有这些都会支持我们需要的视觉效果。

我的感觉是,从审美角度上来看,这一世代有许多游戏都喜欢采用独特的材质,比如说,一些类似带着砂砾感的画面。

Matin:是的,我们看看《杀手》,就会发觉所有地方有一种独特的感觉。从技术角度来说,我们要对游戏需要表现的视觉风格,以及需要传达的感受实现完全支持,这一点非常重要。

所以要在游戏世界观设计里展现独特的审美感,又要让玩家觉得真实可信,这是最大的挑战吧?

Matin:我们有时会用“超写实”(hyperrealism)这个词。我们希望把游戏做到比写实还要写实,从而传达出那种我们希望传达的感觉。

“超写实”主要是美术设计人员关注的领域吗?

工作流程引擎 篇12

关键词:工作流,JBPM,JPDL

1 引言

一项工作,经过一个步骤处理后再转往下一站的连续步骤,称之为“工作流”。工作流就是业务流程的计算机化或自动化。组织内有许多繁琐复杂的业务流程,这些流程构成了组织的日常办公活动。通过现代的技术手段将这些流程自动化,并对其进行有效地管理便是工作流需要解决的问题。

采用工作流管理系统的三大优点:

1)提高系统的柔性,适应业务流程的变化

建设各类信息系统的重要工作之一就是发现用户的工作流程,进行分析建模,并把它体现到信息系统的设计中。

一方面,各汽车制造厂都在随着时间不断地改革工作流程,使厂内各部门能够更好地发挥服务职能、提高工作效率。

另一方面,传统的系统设计方式将业务流程以编码的方式固化在应用系统中,在业务流程和组织结构发生改变的情况下,需要将系统进行重大修改,甚至重新设计。实际上,业务流程的改变是导致许多应用系统失败的最主要的原因。

工作流管理系统的出现使得上述情况发生了改变。应用系统的开发人员通过可视化的方式分析和设计业务流程,并将各个应用模块联接在一起。在组织结构和业务流程发生变化的时候,能够在很少修改甚至不修改原来应用的情况下,仅仅通过适当调整或重新定义工作流程就能适应变化了的情况。

2)降低系统开发和维护成本

据分析,采用工作流管理系统以后,对于管理类的系统可以大大缩短开发周期(60%),降低开发费用(70%),并降低对开发人员的要求。

3)按照流程进行应用的集成

业务流程集成是应用集成的一种高级形式,即按照业务流程把不同的应用集成在一起,形成新的业务应用。

2 需求分析与设计

理赔管理业务流程图如右图1。

由于鉴定单数据并不是一开始就存在汽车售后内部系统的数据库中,而是通过数据交换系统,从“汽车产业链协作asp平台”下载到汽车售后内部系统数据库的。而实际上,根据传统的审批流程,一个流程实例的建立是表单的提交。走保单的提交发生在“汽车产业链协作asp平台”上,不和汽车售后内部系统发生关系,所以走保单的提交并不是走保单审批实例中的一部份。因此,需要有一个模拟的提交过程,即在用户登录系统后自动创建流程实例。

首先:有回访权限的回访员选择回访标签后,系统自动查询数据库中回访状态为“未回访”的走保单数据,创建对应的流程并提交给回访员。

第二:流程流转到回访员处,回访员根据需要进行回访。如果回访员在选择某些走保

单据为不回访并选择提交到某个审核人员,则流程流转到该审核人员并执行流转过程中定义的action,将走保单回访状态设置为“不回访”;如果回访人员选择回访走保单,则在回访界面中,录入相关信息后,根据回访结果选择流程的流向,表单信息由actionform获取,流程流转过程中调用相应的action进行业务逻辑操作。

第三:流程流转到审核人员处,审核员录入审核信息,根据审核结果选择流程下一步,其间也由配置好的action来进行业务逻辑操作。

根据以上,设计流程定义文件如下:

其中的动作处理类均继承自org.jbpm.graph.def.ActionHandler接口,相关的业务逻辑均由这些类在其execute方法中调用,只要业务逻辑不发生变化,即使流程变化了,亦可以通过重新定义流程定义文件来进行调用。其说明如下:

1)TestifyOK:回访成功后处理,调用RepairBill类中的相应set方法修改走保单并通过hibernate提交数据库(该过程主要修改回访状态和回访信息)。在Transition中调用。

2)TestifyError:回访失败后处理,调用RepairBill类中的相应set方法修改走保单并通过hibernate提交数据库(该过程主要修改回访状态、传输状态和回访信息)。在Transition中调用。

3)AuditOK:审核成功后处理,调用RepairBill类中的相应set方法修改走保单并通过hibernate提交数据库(该过程主要记录审核状态、传输状态、审核信息)。在Transition中调用。

4)AuditError:审核失败后处理,调用RepairBill类中的相应set方法修改走保单并通过hibernate提交数据库(该过程主要记录审核状态、传输状态、审核信息)。在Transition中调用。

3 结束语

随着计算机技术的飞速发展,传统的“模块化”的服务系统产品通常是基于任务分割的,作业项目之间是分裂的。面向对象的技术,并不能直接解决这个的问题,相反,往往使系统变得更加混乱和琐碎。工作流管理系统是一个真正的“人-机”系统,用户是系统中的基本角色,是直接的任务分派对象,他或她可以直接看到电脑针对自己列出的“任务清单”,跟踪每一项任务的状态,或继续一项任务,而不必从一个模块退出,进入另一个模块,搜索相应任务的线索。为此,本设计基于JBPM轻量级工作流引擎对系统进行改进,以流程化的形式规范业务工作,简化业务系统的实现并降低流程调整带来的影响。

参考文献

上一篇:权力策略下一篇:修复实践