jbpm4 架构

Jbpm4架构

Jbpm4在架构上分为4种类型API来满足不同的应用场景,

从上图可以看出,黑色线条的是服务API,他通过服务的方式暴露给应用,通常这也是最简单最方便的方式,蓝色线条表示客户端API

ActivityAPI:

活动API用来实现活动在运行时的行为。因此一个活动类型实际上是一个组件,核心是实现了ActivityBehaviour接口。活动行为实现可以控制执行的流程

继承下面接口即可:

publicinterfaceActivityBehaviourextendsSerializable{

voidexecute(ActivityExecutionexecution)throwsException;

}

publicinterfaceActivityExecutionextendsOpenExecution{

voidwaitForSignal();

voidtake(StringtransitionName);

voidexecute(StringactivityName);

...

}

EventListenerAPI:

事件监听API允许使用java开发监听器,并在特定的流程事件发生时调用,像进入一个活动或离开一个活动。它与活动API类似,不同的是不能控制执行流程的传播

只要继承接口

publicinterfaceEventListenerextendsSerializable{

voidnotify(EventListenerExecutionexecution)throwsException;

}

ClientAPI:

Clientapi是相对serviceapi而已的,我个人认为其实serviceapi相关的内部api都可以归为clientapi;同样ActivityAPI和EventListenerAPI也可以认为是clientAPI一类,只是ActivityAPI就是针对Activity来继承,EventListenerAPI针对的是事件,通过事件模式来编写自己代码嵌入到jbpm中。这个API是面对的特定的某个点。

ServiceAPI:

三个主要服务:RepositoryService,ExecutionService和ManagementService。

RepositoryService管理流程定义的资源。

publicinterfaceRepositoryService{

DeploymentcreateDeployment();

ProcessDefinitionQuerycreateProcessDefinitionQuery();

...

}

ExecutionService管理运行时的执行。

publicinterfaceExecutionService{

ProcessInstancestartProcessInstanceById(StringprocessDefinitionId);

ProcessInstancesignalExecutionById(StringexecutionId);

...

}

ManagementService包含了所有管理操作来保持系统启动运行。

publicinterfaceManagementService{

JobQuerycreateJobQuery();

voidexecuteJob(longjobDbid);

...

}

从上面架构图可以看出,clientapi根据需要将操作封装Command

publicinterfaceCommand<T>extendsSerializable{

Texecute(Environmentenvironment)throwsException;

}

三个主要服务通过委派CommandService来执行操作:

publicinterfaceCommandService{

<T>Texecute(Command<T>command);

}

一个CommandService链可以看做环绕在一个命令周围的一些拦截器。这就是如何在不同的环境下进行持久化和事务支持的核心机制。(这种设计模式可以探讨)

retry-interceptor会获取hiberate的StaleObjectExceptions(因为乐观锁失败)并重新尝试执行命令。

environment-interceptor会把一个环境块放到命令执行的周围。

standard-transaction-interceptor会初始化一个StandardTransaction。hibernate会话/事务会被作为标准事务的一个资源。

相关推荐