Activiti Oracle Demo
Activiti是一個開源的BPMN工作流引擎,可以用于自動化流程、任務和決策。在實際應用中,我們通常需要與數據庫進行交互,因此,對Activiti的數據庫支持也非常重要。本文將介紹如何使用Activiti與Oracle數據庫交互,并以示例說明。
準備工作
首先,我們需要下載Activiti的Oracle Demo代碼,下載地址為:https://github.com/Activiti/activiti-examples/tree/master/activiti-oracle-demo,下載后解壓到本地。
接著,我們需要在本地安裝Oracle數據庫和Oracle的JDBC驅動程序。Oracle數據庫的安裝和配置過程略過,需要注意的是,我們需要為數據庫創建一個專門用于Activiti的用戶。
在安裝完數據庫后,我們需要下載Oracle的JDBC驅動程序,下載地址為:https://www.oracle.com/technetwork/database/features/jdbc/default-2280470.html。下載后,將jar包復制到項目的lib目錄下。
配置文件
接下來,我們需要對Activiti的配置文件進行配置。打開項目中的src/main/resources/db.properties文件,修改其中的數據庫配置信息:
db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@localhost:1521:xe db.username=activiti db.password=activiti db.schema.strategy=create-drop
修改其中的db.url、db.username、db.password參數為相應配置信息。
創建數據庫表
在修改了數據庫配置之后,我們需要創建Activiti所需要的表,可以通過Activiti提供的Ant腳本來完成。執行以下命令:
ant create
該命令將創建Activiti所需要的表。
示例代碼
在完成了以上步驟后,我們可以運行Activiti Oracle Demo示例代碼。打開項目的src/main/java/org/activiti/examples/oracle/OracleDemo.java文件,該文件將啟動Activiti的流程引擎,并執行一系列的測試操作。
public static void main(String[] args) { LOGGER.info("start demo"); // 初始化 ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration() .setJdbcDriver("oracle.jdbc.driver.OracleDriver") .setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe") .setJdbcUsername("activiti") .setJdbcPassword("activiti") .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE) .buildProcessEngine(); try { RepositoryService repositoryService = processEngine.getRepositoryService(); IdentityService identityService = processEngine.getIdentityService(); RuntimeService runtimeService = processEngine.getRuntimeService(); TaskService taskService = processEngine.getTaskService(); HistoryService historyService = processEngine.getHistoryService(); // 部署流程定義 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("org/activiti/examples/oracle/FinancialReportProcess.bpmn20.xml") .deploy(); LOGGER.info("deployed process definition {}", deployment.getName()); // 驗證部署 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .deploymentId(deployment.getId()) .singleResult(); assertEquals("financialReportProcess", processDefinition.getKey()); // 啟動流程實例 String authenticatedUserId = "henryyan"; identityService.setAuthenticatedUserId(authenticatedUserId); Mapvariables = Maps.newHashMap(); variables.put("endDate", new Date()); variables.put("reason", "測試流程"); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("financialReportProcess", variables); LOGGER.info("start process instance ok: {}", processInstance.getId()); // 驗證任務是否生成 Task task = taskService.createTaskQuery() .processInstanceId(processInstance.getId()) .singleResult(); assertEquals("填寫財務報告", task.getName()); // 完成填寫財務報告的任務 variables.clear(); variables.put("reportNumber", "001"); taskService.complete(task.getId(), variables); LOGGER.info("task id {} has been completed", task.getId()); // 查詢歷史記錄 HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(processInstance.getId()) .singleResult(); assertNotNull(historicProcessInstance.getEndTime()); LOGGER.info("process instance end time: {}", historicProcessInstance.getEndTime()); } finally { processEngine.close(); } LOGGER.info("end demo"); }
上述代碼中,我們首先配置了流程引擎的相關信息,然后部署了一個工作流程,啟動了流程實例,并驗證了任務的創建,最后完成任務并查詢歷史記錄。
執行示例
在完成以上步驟之后,我們可以執行Oracle Demo示例了。執行以下命令:
mvn compile exec:java -Dexec.mainClass=org.activiti.examples.oracle.OracleDemo
示例將會啟動Activiti流程引擎,并執行相應的測試操作。如果一切正常,我們將看到輸出中包含相應的日志信息。
結論
本文介紹了如何使用Activiti與Oracle數據庫交互,并通過示例說明了具體的操作流程。通過本文的介紹,讀者應該可以更好地理解Activiti的數據庫支持,并在實際應用中更加靈活地配置流程引擎。