流程虛擬機 (PVM) 提供四種整合 API,覆蓋不同執行模式:
| API | 用途 | 特點 |
|---|---|---|
| Service API | 應用程式與 PVM 交互 | 事務性持久化模式,基於資料庫,最常用 |
| Client API | 直接操作流程定義與執行對象 | 無持久化,暴露核心模型方法 |
| Activity API | 實作活動運行時行為 | 實作 ActivityBehaviour,可控制執行流向 |
| Event Listener API | 處理流程事件(進入/離開活動) | 類似 Activity API 但不可控制執行流向 |
// ActivityBehaviour
public interface ActivityBehaviour extends Serializable {
void execute(ActivityExecution execution) throws Exception;
}
// ActivityExecution - 控制執行流向
public interface ActivityExecution extends OpenExecution {
void waitForSignal();
void take(String transitionName);
void execute(String activityName);
}
// EventListener
public interface EventListener extends Serializable {
void notify(EventListenerExecution execution) throws Exception;
}
Environment:抽象事務資源(Hibernate Session、JMS、Timer),支援 Java SE/EE、Spring、Seam 等環境。使用 EnvironmentFactory 建立,以 try-finally 區塊管理生命週期。
EnvironmentFactory factory = new PvmEnvironmentFactory("environment.cfg.xml");
Environment env = factory.openEnvironment();
try {
// 執行持久化操作
} finally {
env.close();
}
Command:封裝在環境區塊中執行的操作單元。
public interface Command<T> extends Serializable {
T execute(Environment environment) throws Exception;
}
| 服務 | 職責 | 關鍵方法 |
|---|---|---|
| RepositoryService | 流程定義資源管理 | createDeployment(), createProcessDefinitionQuery() |
| ExecutionService | 運行時執行管理 | startProcessInstanceById(), signalExecutionById() |
| ManagementService | 系統管理操作 | createJobQuery(), executeJob() |
預設鏈(由內而外):
StaleObjectException(樂觀鎖失敗)並重試。可替換為 Local/Remote EJB 命令服務、非同步訊息佇列等配置。
jbpm.default.cfg.xml:服務啟用配置jbpm.tx.hibernate.cfg.xml:CommandService 攔截器鏈配置