Apache ODE 流程运行过程解析
流程运行概述
流程运行需要引擎首先创建该流程的实例,当然实例的创建也是以接收用户发送的调用消息起始的,然后根据该流程对象的定义按顺序执行一个个活动,像赋值操作、等待操作等,当然最重要的还有调用外部服务的操作,同时还要负责接收发送回来的响应消息,根据响应消息的内容再执行后续的流程,最后流程终止后,销毁该实例。
在本系统中与外界的所有通信都由AXIS2来负责,通过其配置文件来指定不同的消息类型如何进行处理,比如可以给所有的进入消息配置一个处理器,该处理器的工作就是检查该消息头部,得知其是否有状态,以及是否需要返回消息等。通过这样的实现方式就可以对所有接受到的消息进行一次前处理,方便后续的操作。同样,我们可以配置多个处理器,针对各种不同的操作都有相应的动作。这种通过配置文件就可以改变消息处理方式的做法非常简单,这也说明AXIS2的设计扩展性非常好,可以很方便的与其他系统进行集成。
?流程实例的创建?
?对于引擎来说需要同时处理各个不同客户端发送的消息,在同时部署多个流程,多个流程实例在运行时会造成系统很大的负载,从而影响性能。在这里我们采用事件机制,引擎处理流程执行的动作都将其封装为一个任务(Job),通过在一个线程中不断检查可执行任务队列来执行一个个任务。在准备好消息之后,将消息通过任务数据类型封装添加到事件队列中,当任务从队列中弹出时,就是执行该任务了。而任务的执行者需要根据任务的类型来判断如何运行该任务,不同类型的任务交给不同的对象去处理。
?该模型就相当于一个生产者消费者模式,各个标签定义的操作就是生产者,同时也是产品,队列就相当于是缓冲池,流程活动处理器就是消费者。它三者之间的关系就是,操作的执行会将其子标签的操作加入到队列中,而流程活动处理器在不断的检查该缓冲池中是否有可用的产品,一旦发现有了可执行的操作就将其弹出执行,而同时这个弹出的操作有可能将新的操作加入到队列中。