
圖 4.1 流程虛擬機四大 API 體系
| API | 用途 | 適用場景 |
|---|---|---|
| 服務 API | 應用代碼與 PVM 交互 | 持久化模式、事務環境、生產部署(最常用) |
| 客戶端 API | 直接操作核心模型對象 | 非持久化模式、測試環境、嵌入式執行 |
| 活動 API | 實現活動運行時行為 | 開發自定義 ActivityBehaviour 組件 |
| 事件監聽 API | 處理流程事件 | 橫切關注點:日誌、監控、通知等 |
ActivityExecution 暴露流程控制方法:
public interface ActivityExecution extends OpenExecution {
void waitForSignal();
void take(String transitionName);
void execute(String activityName);
// ...
}
與活動 API 類似,但 無法控制執行流向(轉移已選擇時才觸發):
public interface EventListener extends Serializable {
void notify(EventListenerExecution execution) throws Exception;
}
暴露流程定義與執行的直接管理介面,構建最小化執行環境所需。
環境是持久化執行的核心抽象,支援 Java SE、Java EE、Seam、Spring 等事務環境。PVM 僅通過自定義介面調用事務資源(Hibernate Session、JMS Session、Timer Service)。
環境工廠為單例,服務全應用:
EnvironmentFactory environmentFactory = new PvmEnvironmentFactory("environment.cfg.xml");
Environment environment = environmentFactory.openEnvironment();
try {
// 持久化操作
} finally {
environment.close();
}
JbpmConfiguration 同時扮演 Configuration、ProcessEngine、EnvironmentFactory 三重角色。
public interface Command<T> extends Serializable {
T execute(Environment environment) throws Exception;
}
| 服務 | 職責 | 核心方法示例 |
|---|---|---|
| RepositoryService | 流程定義資源管理 | createDeployment(), createProcessDefinitionQuery() |
| ExecutionService | 運行時執行管理 | startProcessInstanceById(), signalExecutionById() |
| ManagementService | 系統維護操作 | createJobQuery(), executeJob() |
所有服務方法封裝為 Command,委派給 CommandService 執行:
public interface CommandService {
<T> T execute(Command<T> command);
}
默認攔截器鏈配置(jbpm.tx.hibernate.cfg.xml):

圖 4.2 CommandService 攔截器鏈結構
StaleObjectException(樂觀鎖失敗),自動重試替代配置選項:本地/遠程 EJB 命令服務(容器管理事務)、異步命令服務(消息驅動、獨立事務)。