一种流程引擎的处理方法和装置的制造方法_2

文档序号:9200211阅读:来源:国知局
中,一个Bundle具体可以包括以下内容:
[0067] 部署描述文件 MANIFEST. MF、超文本标记语言(Hyper Text Markup Language, HTML)、可扩展标记语言(Extensible Markup Language,XML)等各类资源文件、以及类文 件。其中,Bundle的名称标识等元数据信息可以保存在MANIFEST. MF文件中,实现组件对 应的流程步骤逻辑功能的类可以保存在类文件中。
[0068] 下面给出本发明的一种将流程步骤StepOne设计成Bundle的应用示例,具体可以 包括以下步骤:
[0069] 步骤A1、基于Eclipse集成开发环境新建组件项目;
[0070] 步骤A2、在新建的该组件项目中新建java类,该Java类用于实现流程引擎的接 口:ExecuteService ;
[0071] 步骤 A3、通过实现(implements)ExecuteService 接 口中的 execute 方法,实现流 程步骤StepOne的处理逻辑,如系统交互、数据计算等;
[0072] 具体代码示例如下:
[0073]
[0074] 步骤A4、将该组件项目以jar的方式导出,放入OSGi运行环境中,并启动该组件项 目。
[0075] 在完成了将流程步骤设计成OSGi组件之后,为了解决将这些组件化的流程步骤 能够准确无误的在一个流程中执行的问题,可以设计一个流程引擎控制器,该流程引擎控 制器可以用于串联各流程步骤对应的各个Bundle,以控制流程按照指定的顺序执行,例如, 在执行流程的过程中,读取配置信息,先执行步骤1,则根据步骤1对应的组件名称加载步 骤1的组件,步骤1执行完成后再执行步骤2、步骤3等等。其中,配置信息主要包括:该流 程步骤执行类Class名称、该Class所在组件的名称、该流程步骤所关联的审批人员信息、 以及流程步骤的执行顺序。上述配置信息可以在流程开始使用前进行配置。
[0076] 在具体应用中,Bundle的运行主要依靠于OSGi框架为其创建的类加载器 (ClassLoader),类加载器负责查找和加载Bundle自身或所依赖的类资源。
[0077] 在本发明的一种优选实施例中,所述组件具有唯一的标识信息;所述在流程执行 过程中,对流程步骤对应的组件动态进行加载,以动态执行流程步骤的逻辑功能的步骤,可 以包括:
[0078] 在流程执行过程中,依据组件的标识信息获取所述组件对应的类加载器;其中,组 件和类加载器具有一一对应的关系;
[0079] 所述类加载器对实现所述组件逻辑功能所需要的类资源进行加载,以动态执行流 程步骤的逻辑功能。
[0080] 本实施例在流程引擎中可以提供一个动态获取流程步骤所在Bundle的 ClassLoader的方法,当动态获得该ClassLoader时,便可以根据流程指定的配置信息,动 态的实现Bundle对应流程步骤的处理逻辑。具体地,ClassLoader的获得,可以根据OSGi 模式在运行时每个Bundle都有唯一一个确定的标识信息,即组件名称BundleName找到该 运行的Bundle,然后获得该Bundle的ClassLoader0
[0081] 在本发明的一种应用示例中,获得Bundle的ClassLoader具体可以包括以下步 骤:
[0082] B1、向获取ClassLoader的方法传递Bundle参数,如该Bundle的标识信息;
[0083] B2、根据所述Bundle参数,得到与所述Bundle对应的一个类文件的URL (Uniform Resource Locator,统一资源定位符);
[0084] B3、依据所述URL得到所述Bundle对应流程步骤所设定的完整类路径的类 Class ;
[0085] B4、得到流程执行类的Class类型(ClassType),依据该ClassType便可获得所述 Bundle 的 ClassLoader0
[0086] 下面给出本发明的一种获得Bundle的ClassLoader的代码示例,具体可以包括:
[0087]

[0089] 在具体应用中,除了在运行时动态获得流程步骤Bundle的ClassLoader之外,还 需要设计一个能够调度执行流程步骤处理逻辑的通用接口 ExecuteService :所有的流程 步骤都实现该接口,通过实现(implements) ExecuteService接口中的execute方法,实现 流程步骤的处理逻辑,如系统交互、数据计算等,然后利用Java多态特点,流程引擎控制器 能够准确的执行具体的流程步骤逻辑。参照图2,示出了本发明的一种通用接口的示意图。
[0090] 优选地,所述方法还可以包括:
[0091] 建立包括各流程步骤对应组件的组件库;
[0092] 在流程执行过程中对所述组件库中的各组件进行复用。
[0093] 本发明实施例可以为各流程步骤对应的组件建立组件库,由于组件具有标准化的 接口和平台独立性,因此可以方便地对组件复用,从而可以缩减流程引擎开发和维护的成 本。
[0094] 步骤102、对未执行的流程步骤对应的组件进行更新。
[0095] 本发明实施例对流程步骤进行组件化设计,使得各组件为高内聚、低耦合、以及实 现独立逻辑功能的整体,使得流程步骤可以热插拔的方式实现,因此,在流程运行状态中可 以依据需要对未执行的流程步骤进行实时更新。
[0096] 在基于OSGi的框架中,对未执行的流程步骤进行实时更新可以包括以下子步骤:
[0097] 步骤C1、对所述未执行的流程步骤对应的原组件逻辑代码进行更新,并导出更新 后新组件的jar文件;
[0098] 步骤C2、在OSGi运行环境中停止所述未执行的流程步骤对应的原组件的服务;
[0099] 步骤C3、在OSGi运行环境中移除所述原组件;
[0100] 步骤C4、将所述新组件对应的jar文件安装到所述OSGi环境中;
[0101] 步骤C5、启动所述新组件。
[0102] 在本发明的一种应用示例中,用户申请一个负载均衡应用,该应用的流程为先执 行步骤甲,再执行步骤乙。当用户点击申请负载均衡应用时,触发该流程的执行,此流程走 到步骤甲,步骤甲对应一个独立的组件bundlel,通过加载bundlel执行步骤甲对应的算法 或计算逻辑得到运算结果,此时,若需要对步骤乙的算法或计算逻辑进行修正,则可以采用 上述更新步骤对步骤乙对应的bundle2进行更新,而不用中断整个申请流程。
[0103] 综上,本发明流程引擎的处理方法将流程中的各步骤配置成独立的组件,并且在 流程执行过程中对各步骤对应的组件动态进行加载,使得流程引擎的各流程步骤相互独 立,从而可以在流程执行过程中对指定的未执行的流程步骤进行实时更新,例如,当流程执 行到某一步骤时,可因业务需求动态更新流程后续未执行步骤的处理逻辑,来适应动态多 变的业务需求,并且无需中断整个流程,从而可以提高流程的执行效率。
[0104] 数据处理实施例一
[0105] 传统的流程引擎无法同时具备业务流程与数据集成的功能,需要独立引入两个开 源框架。本发明实施例在CMDB(Configuration Management Database,配置管理数据库) 数据模型中实现流程引擎,该流程引擎可以同时具备业务流程功能和数据集成功能,使得 在流程执行的同时能够根据流程配置中的条件和需求与其它系统进行数据交互。
[0106] CMDB可以将现有常规二维表的固定结构打散开来,用动态可配置的方式,按照需 要动态生成可配置的二维表。也就是将表的列变成独立的单元,然后依照配置信息,将打散 开来的列拼成需要的表,该表中的列可动态添加或删除。
[0107] 在本发明实施例中,流程引擎中的流程定义,流程步骤定义,以及流程步骤涉 及审批功能的关系设计都依据CMDB的核心表来完成。CMDB的核心表具体可以包括: ConstraintType 约束类型、PropertyPool 属性池 、ClassTree 配置树、ConfigItem 配置项、 CIRelationShip 配置项关系、ClPropertyValue 配置项属性。
[0108] 其中,ConstraintType :将要接入系统的数据模型之属性的数据类型抽象化成约 束种类,进而可重复使用。如:数值类型、字符类型、日期类型、数组类型等。
[0109] PropertyPool :数据模型的属性池,用于数据模型的选用配置。
[0110] ClassTree :配置树具有把数据模型所需要的属性进行串联的功能。
[011
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1