这篇文章大部分内容翻译自ODE主页http://ode.apache.org/
最后一部分,对于使用ODE+Tempo等其他第三方工具构建业务流程执行系统做了一个简单叙述。
Apache ODE引擎架构设计
该文档描述Apache ODE(Orchestra Director Engine)引擎的系统架构,对于后期的系统扩展做好准备。
下面的部分将从较高层次介绍ODE的系统整体架构,首先将先对ODE的设计目标进行一个简单描述,然后再介绍各种ODE组件以及它们之间是如何交互的,最后是对本项目BPEL引擎模块的一个初步设想。
2. ODE的设计目标
ODE的开发目标是建立一个可靠的、轻型的、可嵌入的能够管理长时间运行流程的组件,该流程由BPEL流程描述语言定义。开发核心是创建一些小模块,这些小模块具有很小的互相的依赖性,通过很容易的组装这些组件可以构成一个完整的BPM系统。
ODE系统架构的关键模块包括ODE BPEL编译器、ODE BPEL运行时、ODE数据访问对象(DAOs)、ODE集成层(ILs)和用户工具。下面的这张图从较高层次上表示了这些不同组件之间的关系。
图 1 ODE模块关系图
这个整体关系可以这样认为:“编译器将BPEL文档转化成为可以被BPEL运行时库执行的格式,执行时通过一种可靠的方式进行,它依赖于一个持久化方式(通过DAOs);运行时库在集成层的上下文环境总执行,该集成层将引擎与外界更宽广的执行环境相连接”。
ODE BPEL编译器负责将BPEL源文件(BPEL流程描述文件、WSDL文件以及Schemas)转化成一个编译好的、适合于引擎执行的流程表示形式。编译器的输出不是一个“好的”编译好的表示形式,就是一系列的错误信息,表明该源文件的问题。
编译好的BPEL流程表示是一个对象模型,该模型在结构上和底层的BPEL流程文档是一样的。然而,编译好的流程表示已经解析了大量BPEL文档中的命名引用(例如变量名),将所需要的WSDL文件以及类型信息,还有产生的大量的结构(像default compensation handlers)内化(internalized)。该编译好的文件(一个扩展名为.cbp的文件)是唯一一个BPEL运行时所需的文件。
ODE BPEL运行时就是bpel-runtime模块,提供对于执行编译好的BPEL流程所需的功能。运行时模块通过提供对于各种不同BPEL结构的实现,来执行流程运行的工作。运行时模块同时还实现了一些必须的逻辑上的功能,像决定何时一个新的实例需要被创建,以及一个新到来的message应该被发送到那个实例中等。最终,运行时模块还实现了流程管理API,这些API使用外层用户用来和流程进行交互的。
为了达到在不可靠环境下,可靠地执行流程的目的,运行时模块依赖于DAOs模块来提供相关的持久化功能。对于这些DAOs的实现是可以被定制的,但是一般情况下都是由一个事务关系型数据库来充当的。关于DAOs的更多细节将在下一小节中详细叙述。
运行时模块对于BPEL结构的实现是通过ODE的Java Concurrent Objects(Jacob)框架来实现的。Jacob提供了一个应用级的并发机制(它并不是依赖于线程)同时包括一个透明的处理流程中断和持久化流程状态的机制。Jacob是Java对于ACTORS[Agha]并行模型实现的一个很大的组成部分,同时还有很多的流程代数学特征,像pi的演算。本质上,Jacob提供了一个持久虚拟机来执行BPEL结构。
ODE 的数据访问对象(DAOs)处于BPEL运行时模块与底层数据源交互过程的中间位置。一般情况下,该数据源是一个JDBC的关系型数据库:目前,这个DAOs是通过OpenJPA数据访问库(Data access library)来实现的。你也可以创建一个特定的DAO实现,它使用另外一种不是JDBC的方式的机制来达成数据持久化目的,但是在这里并不提供这样的实现。BPEL引擎的运行时要求DAO对象能够处理以下的这些持久化事件:
1) 活动的实例——跟踪哪些实例已经被创建
2) 消息路由——哪个实例在等待哪个消息
3) 变量——对于每一个实例的BPEL流程变量的值
4) 伙伴链接——对于每个实例的BPEL伙伴链接的值
5) 流程执行状态——Jacob的持久化虚拟机的连续状态
关于OpenJPA/JDBC 的DAO实现,它们用来实现上面这些功能的关系结构在图1中已经表明。
ODE BPEL引擎运行时不能在一个真空中存在:它自己是无法影响任何与外部世界的交互的。关于这一点,它是依赖于ODE的集成层(ILs)。在执行环境中集成层是嵌入在运行时中的。例如,目前ODE提供对于AXIS2和JBI的集成层。集成层的最基础的功能是提供跟运行时的一个通信通道(communication channels)。AXIS2的集成层通过使用AXIS2的库来达到这一目的,这样可以使得运行时通过Web Service调用进行通信。JBI的集成层通过将运行时绑定到JBI的消息总线上来达到这一目的。
此外对于通信,一个集成层通过一个线程调度机制提供运行时,同时管理运行时的生存周期(例如,配置和启动运行时)。
如果采用Apache ODE引擎作为本项目的引擎原型系统进行开发,主要的工作将包括以下几个部分:
1) 对于BPEL4People实现的集成
根据目前了解情况Intalio公司的Tempo工作流框架实现了B4P(同时还包括BPEL、Xforms、WebService等)规范,而且已经加入到了他们公司的BPMS产品中,该产品的BPEL4WS的实现就是ODE,所以证明了ODE+Tempo集成的可行性。但该产品并没有完全开源。但是Tempo部分完全开源,可以获得其源代码。但是针对BPEL4People的设计器目前还没有看到,所以该部分的设计器的实现将是很大的工作。
从ActiveBPEL的源代码组织结构上来看,B4W的实现和B4P的实现时完全分开的,也就是说一个流程要么是B4W的,要么是B4P的,不同的流程会分发到不同的实现中去执行。我们也可以学习这种方式,设计好的流程根据其设计种类,其执行实现也不同,即就是B4W的通过ODE来实现,B4P的通过Tempo来实现。这样或许可以解决BPEL4People的集成问题。
2) 对于Eclipse-BPEL设计器的改造
首先是对于用户可用性的改造,包括汉化、活动名称的改变、一些BPEL术语的解释等,这些还都是表面活动。然后,就是与流程部署的集成,可以在设计完成之后,直接就可以部署该流程;与引擎生存周期管理的集成,像是引擎的启动、停止、重启等操作。最后,还需要加入对于执行的流程实例的监控,包括可以重启某个实例、停止实例执行、检查实例的中间执行状态等。
对于流程设计人员,该设计器将是其最主要的工作平台,但是不光是一个设计平台,它最终是一个All-In-One的一个软件,包括了以上所提到的各个部分。
3) 对于服务动态绑定模块的扩展
该部分的主要工作将在引擎中进行。目前,我的解决方案是:在流程部署描述符中添加特定标签,来指示该流程是否需要动态绑定;动态绑定的流程部署的时候,可以不用WSDL文件,只需要在部署描述文件中描述该WSDL的url便可以,流程在执行过程中再获取该WSDL然后发送SOAP消息。
4) 对于分布式流程执行的探索研究
该部分目前还只是术语探索阶段,暂时没有解决方案。
ODE的优势:
1) 开源,文档相对较为齐全
2) 与Eclipse-BPEL设计器、Tempo(B4P的一个实现)结合相对比较紧密,集成难度相对较小
从Eclipse-BPEL的SVN上来看,它的下一版本将会与ODE集成,设计完的流程可以直接部署到ODE引擎中,还有就是IBM的Developerworks网站上对于BPEL流程设计的教程也是通过ODE+EclipseBPEl的方式来进行描述的。
还有就是ODE,以及Tempo最初都是源于同一个公司Intalio,而且该公司也已经发布了一个ODE+Tempo+BPMN-modeler的产品。
3) 与JBI的集成较为简单,因为ODE的实现就考虑到了JBI集成问题。
ODE的劣势:
- 大小: 13.9 KB
分享到:
相关推荐
### Apache ODE 架构详解 #### 一、概述 Apache ODE (Orchestration Director Engine) 是一款基于BPEL (Business Process Execution Language) 的开源业务流程管理系统。其核心功能在于提供一个轻量级、可扩展且...
2. **Apache ODE架构** Apache ODE由多个组件构成,包括: - **部署单元(Deployment Unit)**:包含BPEL流程的定义。 - **引擎(Engine)**:解析并执行BPEL流程。 - **存储库(Repository)**:存储流程实例、...
### Apache ODE 详细介绍 #### 一、Apache ODE 概述 Apache ODE (Orchestration Director Engine) 是一款基于 Java 的开源 BPEL (Business Process Execution Language) 引擎,它诞生于 2007 年 7 月 18 日,作为 ...
Apache ODE(OpenESB Decoupled Engine)是一个开源的BPEL执行引擎,它实现了WS-BPEL 2.0规范,为开发者提供了实现和执行BPEL流程的平台。 Apache CXF则是一个全面的服务开发框架,支持多种Web服务标准,如SOAP、...
本文中介绍的VxBPEL_ODE引擎,是通过扩展广受认可的开源BPEL引擎Apache ODE实现的,它支持VxBPEL服务组合的执行。开发者讨论了开发VxBPEL_ODE时的关键问题,并通过三个现实生活中服务组合的例子来评估和比较它与先前...
- **技术框架**:Eclipse-BPEL 和 Apache ODE - **服务器**:Tomcat 6.0 - **JDK**:1.6 - **服务实现**:Apache CXF 2.2.5 #### 创建服务步骤详解 1. **创建Java项目与接口**: 首先,创建一个名为“AddService...
论文首先对Apache ODE的JACOB组件进行了深入研究,分析了其处理并发活动和调度控制的方法。并发活动的管理是流程引擎设计的关键,因为它涉及多个活动的同步和协调。论文详细描述了JACOB是如何通过通信通道机制来处理...
ServiceMix集成了许多优秀的开源项目,如Apache ActiveMQ、Apache CXF、Apache Camel、Apache ODE及Apache Geronimo等,这使得用户可以轻松构建复杂的集成逻辑。LogicBlaze公司是ServiceMix的主要贡献者之一,同时...
文档还会涵盖OFBiz的工作流系统,它基于Apache ODE(OpenDESL)。理解工作流定义语言(WSDL)和BPEL(Business Process Execution Language)对于管理复杂的业务流程至关重要。开发者将学会如何定义、部署和监控工作...
总的来说,"代码博客"项目是一个用Java开发的博客平台,它提供了用户友好的博客创建和管理功能,其源代码可能包含了完整的前后端架构,适合开发者学习和二次开发。通过解压并研究"codeblog-master",我们可以深入...
- **BPEL实现**:Apache ODE是基于Java的开源BPEL引擎,能够执行BPEL描述的业务流程,实现业务流程自动化。它支持长期运行和短期运行的过程,采用Apache 2.0许可证。 #### 四、总结 Mule作为一个强大的ESB平台,为...
本文作者在深入研究了Apache ODE(一个流行的BPEL流程引擎)的基础上,对其实现机制进行了细致的分析,特别是关于如何处理并发活动以及调度控制的问题。 #### 2. 技术选型 - **C++语言选择**:鉴于C++在性能方面的...
**BPEL商业流程建模**是面向...此外,了解相关的工具和技术,如Eclipse BPEL Designer或Apache ODE等,也有助于提升开发效率和流程质量。通过不断的实践和学习,可以掌握创建高效、灵活且可维护的BPEL流程的关键技能。
1. **源码**: 虽然BPEL本身是一种规范,而不是源码,但可能指的是用于实现BPEL引擎的开源代码库,如Apache ODE或Oracle BPEL PM,这些引擎可以解析并执行BPEL流程。 2. **工具**: BPEL的开发和管理通常依赖于特定的...
**SOA(面向服务架构)**是IT领域中一种重要的设计模式,它强调将复杂的系统分解为一组可重用的服务,这些服务具有清晰的边界、独立的功能,并通过标准的接口进行交互。在SOA中,服务是业务能力的体现,它们可以被...
ODE(Orchestrations for the DEployment Environment)是Apache提供的一款开源BPEL引擎,它实现了BPEL规范,提供了部署和执行BPEL流程的环境。在ODE中,相关集合的管理和使用是其核心功能之一,它为开发者提供了...
BPEL执行引擎有多种实现,如Oracle's BPEL PM(Process Manager)、IBM WebSphere Process Server的BPEL引擎以及Apache ODE(OpenESB Data Engine)。这些实现都提供了API和工具集,使得开发者能够集成BPEL流程到...
2. **创建流程定义**:使用BPEL编辑器(如Apache ODE或Oracle BPEL PM)编写XML流程定义文件,声明变量、活动和合作伙伴链接。 3. **实现服务交互**:配置活动以调用或响应外部服务,定义消息结构和转换规则。 4. ...
开发BPEL流程通常需要使用专门的工具,如Oracle BPEL Process Manager、Apache ODE或IBM WebSphere Lombardi Edition等。这些工具提供了图形化界面,便于创建、测试和部署BPEL流程。 5. **发布与执行** 创建完...
如JBoss jBPM、ActiveBPEL、Intalio/Apache ODE等开源项目,在功能与性能上已达到甚至超越了部分商业产品。 ### BPM与SOA的融合 BPM与SOA的结合被视为企业信息化建设的未来趋势。SOA强调服务的封装与重用,而BPM则...