Apache ODE开发指南
ODE的关键组成部分包括ODE BPEL编译器,ODE BPEL引擎 Runtime,ODE数据访问对象( DAOs ) ,ODE整合层(ILS) ,以及用户工具。如下图所示: “编译器将BPEL文件转换成可在ODE BPEL引擎 Runtime中执行的对象,这些对象可通过一个可靠的方式依靠ODE数据访问对象进行可持久化的存取;运行时环境之上则是ODE整合层,它连接到外部世界更广泛的执行环境
如上图所示:
BPEL编译器负责将BPEL相关资源(BPEL描述文档,WSDL和Schema)编译成可执行的描述。编译成功之后会产生一个扩展名为.cbp的文件,该文件是BPEL运行时唯一需要的文件。编译失败时,编译器会列出与资源有关的错误信息。
BPEL引擎运行时负责执行编译后的BPEL过程,主要的功能包括:过程实例的创建、销毁、消息的收发等。它还为用户工具与引擎交互提供了过程管理API。执行过程中的实例状态跟踪和消息传递都会需要利用持久化机制,这由DAO组件来完成。引擎运行时(Runtime)利用java并发对象(java Concurrent Object,Jacob)来完成过程实例的状态表示和并发性管理。Jacob提供了应用性的并发机制,它不依赖于线程,这样就降低了系统的开销。
ODEDAO组件负责BPEL引擎运行时和底层数据存储的交互,数据存储一般使用关系数据库。此时。DAO由OpenJPA来实现。可以自定义不使用JDBC的DAO实现,目前ODE并不提供这种DAO实现。对于自定义DAO实现,需要处理以下持久化问题:
激活实例,跟踪哪些实例已经被创建;
消息路由,哪些实例在等待哪些消息;
变量,每个实例的BPEL变量的值;
合作伙伴链接(partner links),每个实例的BPEL合作伙伴链接值;
过程执行状态,序列化JACOB的状态。
ODE BPEL引擎运行时依赖集成层(IL)与外界进行通信。在执行环境中,集成层内嵌了运行时。除了通信,集成层还给运行时提供了线程调度机制,并管理运行时的生命周期。当前版本提供了两种集成层实现:Apache AXIS2,使用WEB服务进行交互;ServiceMix ix,通过JBI消息总线进行交互。
webserver接口开发ODE所提供的流程管理接口通常定义了五种操作:
● List—获取流程的信息列表
● Details---获取流程定义的具体信息
● Set-properties---改变流程定义的属性
● Activate---激活新的流程定义
● Retire---撤销某些流程定义
对流程的管理通过org.apache.ode.bpel.pmapi包中的接口ProcessManagement来实现。它的实现类是org.apache.ine包中的BpelManagementFacadeImpl和ProcessAndInstanceManagementImpl。
其中ProcessManagement提供的方法有:
方法 | 描述 |
activate(l.namespace.QName pid) | 激活一个流程 |
getProcessInfo(l.namespace.QName pid) | 得到一个流程的详细信息 |
listAllProcesses() | 列出流程引擎中的所有流程 |
listProcesses(java.lang.String filter, java.lang.String orderKeys) | 列出符合某些过滤条件的流程 |
setPackageRetired(java.lang.String packageName, boolean retired) | 使某个包中的所有流程失去作用 |
setProcessProperty(l.namespace.QName pid, l.namespace.QName propertyName, java.lang.String value) | 为BPEL流程的某个属性赋值 |
setRetired(l.namespace.QName pid, boolean retired) Retire a process. | 使某个流程失去作用 |
在listProcesses函数中Filter字符串用来对流程进行某些条件的过滤处理,它有下面四种过滤方式:
● Name---由流程的名字来进行过滤
● Namespace---根据命名空间来进行过滤
● Status---根据流程状态来进行过滤
● Deployed---由流程部署时间来进行过滤。如:想得到2005年9月1号部署的所有流程,则filter字符串表示为”deployed>=20050901”.
BpelManagementFacadeImpl类中所定义的方法有:
方法 | 描述 |
getProcessInstance(java.lang.String pid, CorrelationKey ckey | 获取某个流程的实例,ckey代表实例的关联键值 |
getVariable(java.lang.Long iid, java.lang.Long scopeId, java.lang.String varName) | 获取流程变量 |
setVariable(java.lang.Long pid, java.lang.Long scopeId, java.lang.String varName, java.lang.String data) | 设置流程变量 |
getProcessDef(java.lang.String procid) | 获取流程定义 |
getStartTime(java.lang.Long iid) | 获取流程实例的开始时间 |
getState(java.lang.Long iid) | 获取流程实例状态 |
getEvents(java.lang.Long iid, int startIdx, int count) | 获取流程实例的事件历史纪录 |
getEventCount(java.lang.Long iid) | 获取流程实例的事件数目 |
getBreakpoints(java.lang.Long iid) | 获取流程实例的断点 |
getGlobalBreakpoints(java.lang.String procId) | 获取流程实例中的全局断点 |
removeBreakpoint(java.lang.Long iid, Breakpoint sp) | 移除断点 |
removeGlobalBreakpoint(java.lang.String procId, Breakpoint sp) | 移除全局断点 |
addActivityBreakpoint(java.lang.Long iid, java.lang.String activity) | 添加断点并激活 |
addGlobalActivityBreakpoint(java.lang.String procId, java.lang.String activity) | 添加全局断点 |
addVariableModificationBreakpoint(java.lang.Long iid, java.lang.String scopeName, java.lang.String variable) | 添加变量断点 |
对流程实例的管理主要通过org.apache.ode.bpel.pmapi包中的接口InstanceManagement来实现。它的实现类是org.apache.ine包中的BpelManagementFacadeImpl和ProcessAndInstanceManagementImpl。
其中InstanceManagement所提供的方法有:
方法 | 描述 |
listInstances(java.lang.String filter, java.lang.String order, int limit) | 获取符合条件的流程实例 |
listAllInstances() | 列出所有流程实例 |
listAllInstancesWithLimit(int limit) | 列出最多limit个数的所有流程实例 |
getInstanceInfo(java.lang.Long iid) | 获取流程实例信息 |
getScopeInfo(java.lang.String siid) | 获取实例范围信息 |
listEvents(java.lang.String instanceFilter, java.lang.String eventFilter, int maxCount) | 获取bpel事件信息 |
getEventTimeline(java.lang.String instanceFilter, java.lang.String eventFilter) | 获取事件的时间迹 |
suspend(java.lang.Long iid) | 暂停流程实例 |
resume(java.lang.Long iid) | 恢复流程实例 |
terminate(java.lang.Long iid) | 停止流程实例 |
fault(java.lang.Long iid, l.namespace.QName faultname, org.w3c.dom.Element faultData) | 将流程置为错误状态 |
delete(java.lang.String filter) | 删除一个流程实例 |
recoverActivity(java.lang.Long iid, java.lang.Long aid, java.lang.String action) | 覆盖一个活动的流程实例 |
流程实例的过滤可通过以下途径:
● Name---由实例名过滤
● Namespace---由命名空间过滤
● Status---由实例状态过滤
● Started---由某开始时间过滤
● Last-active---由上一次的激活时间过滤
● $property---由相关属性过滤
实例的状态有:
● active –-- 所有激活的实例
● completed –-- 所有完成的实例
● terminated –-- 所有中止的实例.
● failed –-- 所有失败的实例.
● suspended –--所有悬挂起的实例.
● error –--所有错误的实例.
对流程实例的操作:
● list ---返回符合条件的流程实例.
● detail ---获取某流程实例的详细信息
● suspend ---暂停流程实例
● resume ---唤醒暂停的流程实例
● terminate ---终止流程实例
● fault ---使流程实例运行失败
● delete ---删除流程实例
ProcessAndInstanceManagementImpl所提供的方法有:
方法 | 描述 |
ProcessAndInstanceManagementImpl(BpelServer server, ProcessStore store) | 构造方法,传递一个BPELServer进来 |
queryInstances(java.lang.String query) | 查询实例 |
Apache ODE通过传递BpelServer 接口对象给流程和流程实例的façade从而实现对流程和流程实例的管理与监控BpelServer 接口实现类BpelServerImpl定义出的方法如下:
方法 | 描述 |
Start() | 启动BPEL引擎,流程实例可以开始被执行 |
registerBpelEventListener(BpelEventListener listener) | 注册一个BPEL事件监听 |
unregisterBpelEventListener(BpelEventListener listener) | 取消一个BPEL事件监听 |
stop() | 停止BPEL引擎 |
init() | 初始化BPEL引擎 |
shutdown() | 关闭BPEL引擎 |
getEngine() | 获取BPEL引擎 |
register(ProcessConf conf) | 向BPEL引擎上注册一个流程 |
l.namespace.QName pid) | 从BPEL引擎上移除一个流程 |
setScheduler(Scheduler scheduler) | 在BPEL引擎上设置一个日程计划 |
setDaoConnectionFactory(BpelDAOConnectionFactory daoCF) | 设置DAO连接工厂 |
setBindingContext(BindingContext bc) | BPEL引擎利用绑定上下文进行服务注册 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论