jBPM 4 基於流程虛擬機(Process Virtual Machine, PVM)構建,提供四個集成 API,覆蓋不同執行模式下的完整流程工作:
RepositoryService、ExecutionService、ManagementService 三大核心服務ActivityBehaviour 接口execute(ActivityExecution execution) 方法控制執行流向ActivityExecution 提供 waitForSignal()、take(transitionName) 等流程控制方法EventListener 接口,notify(EventListenerExecution) 方法Environment 解決流程在不同事務環境(Java SE、Java EE、Spring、Seam)下執行的問題:
// 環境工廠創建(單例,全應用共享)
EnvironmentFactory environmentFactory = new PvmEnvironmentFactory("environment.cfg.xml");
// 環境塊包裹持久化操作
Environment environment = environmentFactory.openEnvironment();
try {
// 在環境中執行流程操作
} finally {
environment.close(); // 確保資源釋放
}
org.jbpm.pvm.internal.cfg.JbpmConfiguration 同時扮演 Configuration、ProcessEngine、EnvironmentFactory 三重角色。
Command<T> 接口封裝在環境塊中運行的操作:
public interface Command<T> extends Serializable {
T execute(Environment environment) throws Exception;
}
所有服務方法最終委派給 CommandService 執行,形成攔截器鏈:
StaleObjectException(樂觀鎖失敗)並重試public interface RepositoryService {
Deployment createDeployment();
ProcessDefinitionQuery createProcessDefinitionQuery();
// 部署、查詢、刪除流程定義資源
}
public interface ExecutionService {
ProcessInstance startProcessInstanceById(String processDefinitionId);
ProcessInstance signalExecutionById(String executionId);
// 啟動流程、發送信號、任務管理等
}
public interface ManagementService {
JobQuery createJobQuery();
void executeJob(long jobDbid);
// 定時任務、異步消息、系統監控
}
<jbpm-configuration>
<process-engine>
<repository-service />
<repository-cache />
<execution-service />
<history-service />
<management-service />
<identity-service />
<task-service />
</process-engine>
</jbpm-configuration>
<jbpm-configuration>
<process-engine-context>
<command-service>
<retry-interceptor />
<environment-interceptor />
<standard-transaction-interceptor />
</command-service>
</process-engine-context>
</jbpm-configuration>
通過替換 command-service 配置,支援多種企業級部署:
jBPM 4 通過 環境抽象 解耦業務邏輯與事務基礎設施,通過 命令模式+攔截器鏈 實現橫切關注點(重試、事務、環境)的可組合配置。這種設計使流程引擎能無縫適配從輕量級嵌入到分布式集群的各種部署拓撲,是典型的企業級框架架構典範。