Apache ODE开发指南
ODE的关键组成部分包括ODE BPEL编译器,ODE BPEL引擎 RuntimeODE数据访问对象 DAOs ODE整合层(ILS ,以及用户工具。如下图所示: “编译器将BPEL文件转换成可在ODE BPEL引擎 Runtime执行的对象,这些对象可通过一个可靠的方式依靠ODE数据访问对象进行可持久化的存取;运行时环境之上则是ODE整合层,它连接到外部世界更广泛的执行环境
如上图所示:
    BPEL编译器负责将BPEL相关资源(BPEL描述文档,WSDLSchema)编译成可执行的描述。编译成功之后会产生一个扩展名为.cbp的文件,该文件是BPEL运行时唯一需要的文件。编译失败时,编译器会列出与资源有关的错误信息。
    BPEL引擎运行时负责执行编译后的BPEL过程,主要的功能包括:过程实例的创建、销毁、消息的收发等。它还为用户工具与引擎交互提供了过程管理API。执行过程中的实例状态跟踪和消息传递都会需要利用持久化机制,这由DAO组件来完成。引擎运行时(Runtime)利用java并发对象(java Concurrent ObjectJacob)来完成过程实例的状态表示和并发性管理。Jacob提供了应用性的并发机制,它不依赖于线程,这样就降低了系统的开销。
    ODEDAO组件负责BPEL引擎运行时和底层数据存储的交互,数据存储一般使用关系数据库。此时。DAOOpenJPA来实现。可以自定义不使用JDBCDAO实现,目前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包中的BpelManagementFacadeImplProcessAndInstanceManagementImpl
其中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---由流程部署时间来进行过滤。如:想得到200591号部署的所有流程,则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包中的BpelManagementFacadeImplProcessAndInstanceManagementImpl
其中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小时内删除。