JBPM4.4(二)——初步運用
阿新 • • 發佈:2019-01-04
這篇部落格重點描述一下JBPM4.4的初步運用,利用eclipse進行工作流開發,首先需要進行eclipse外掛的安裝jbpm-gpd-site.zip。通過help->Install NewSoftware進行安裝即可。當我們右擊新建other出現如圖所示時,表示我們已經安裝好了:
好,安裝好了,看一下如何使用吧:
一,和各種框架一樣,首先需要JBPM4.4所需要的jar包,這裡利用MySql資料庫為例演示:
jbpm.jar(核心jar包)
lib\*.jar(刪除mysql-connector-java.jar,我們自己引入MySql的驅動jar包,這裡有很多jar包,我們可以有選擇的進行刪除,例如一些例子,日誌的,單元測試的等,當然瞭如果不知道的話就不要刪除)
MySQL JDBC Driver(MySql的驅動jar包)
二,編寫必要的配置檔案:
1,jbpm.cfg.xml的編寫:
<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration>
<!-- 引入jbpm的一些配置檔案 -->
<import resource="jbpm.default.cfg.xml" />
<import resource="jbpm.businesscalendar.cfg.xml" />
<import resource="jbpm.tx.hibernate.cfg.xml" />
<import resource="jbpm.jpdl.cfg.xml" />
<import resource="jbpm.bpmn.cfg.xml" />
<import resource="jbpm.identity.cfg.xml" />
</jbpm-configuration>
2,jbpm.hibernate.cfg.xml,JBPM的持久化層就是使用Hibernate的:
<hibernate-configuration>
<session-factory>
<!-- 資料庫連線,注意方言的要用InnoDB的 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
……………………
<mapping resource="jbpm.repository.hbm.xml" />
<mapping resource="jbpm.execution.hbm.xml" />
<mapping resource="jbpm.history.hbm.xml" />
<mapping resource="jbpm.task.hbm.xml" />
<mapping resource="jbpm.identity.hbm.xml" />
<mapping resource="com/bjpowernode/jbpm4/FlowCard.hbm.xml"/>
<mapping resource="com/bjpowernode/jbpm4/ApproveInfo.hbm.xml"/>
</session-factory>
</hibernate-configuration>
三,定義流程:JPDL(Jboss JBPM Process Definition Language),用來構建構建JBPM框架上的流程語言之一。在JPDL中提供了任務(tasks)、待處理狀態(wait states)、計時器(timers)、自動處理(automated actions)……等,並通過圖形化的流程定義,很直觀的描述業務流程。其實就是畫活動流程圖,它會自動為我們生成專案需要的XML資原始檔,然後進行解析此資原始檔,進行流程的處理,這裡其實就是我們只需要關心流程,對於具體的操作,JBPM已經都進行封裝。
四,部署流程:
將利用JPDL定義流程的xml檔案和圖片進行壓縮成zip壓縮包,利用repositoryService進行部署:
//建立processEngine
ProcessEngine processEngine = new Configuration().buildProcessEngine();
//建立RepositoryService,其他六個一樣的建立法
RepositoryService repositoryService = processEngine.getRepositoryService();
//進行部署,
repositoryService.createDeployment().addResourcesFromZipInputStream(new ZipInputStream(new FileInputStream("zip包的路徑"))).deploy();
五,建立流程例項,當然也可以通過獲取最新版本的流程進行動態獲取id
//利用executeService,注意id=key + 橫線 + version
executionService.startProcessInstanceById("FlowCard-1");
//獲得最新版本的流程定義
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)
.page(0, 1)
.uniqueResult();
//建立流程例項
executionService.startProcessInstanceById(processDefinition.getId());
六,採用TaskService取得代辦流程並進行處理,簡單看一個測試程式:
//取得張三的待辦任務
public void testJbpm3() {
//取的代辦流程
Task task = taskService.findPersonalTasks("張三").get(0);
//獲取JBPM中的session方便,便於事物的處理
EnvironmentFactory environmentFactory = (EnvironmentFactory)processEngine;
EnvironmentImpl environmentImpl = environmentFactory.openEnvironment();
DbSessionImpl dbSessionImpl = environmentImpl.getFromCurrent(DbSessionImpl.class);
Session session = dbSessionImpl.getSession();
try {
//開啟事物
session.getTransaction().begin();
//流程單的資訊新增
FlowCard flowCard = new FlowCard();
flowCard.setName("xxxx");
flowCard.setLevel("xxxxx");
flowCard.setCreateTime(new Date());
flowCard.setCreator("xxxx");
//儲存流向單
session.save(flowCard);
//將流向單資訊放到流程變數中
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("id", flowCard.getId());
variables.put("level", flowCard.getLevel());
//放到jbpm4_variable表中,流程變數與流程共存亡
taskService.setVariables(task.getId(), variables);
//完成任務
taskService.completeTask(task.getId());
//提交事物
session.getTransaction().commit();
}catch(Exception ex) {
ex.printStackTrace();
//事物回滾
session.getTransaction().rollback();
}finally {
session.close();
}
}
這樣就可以根據不同的角色進行處理,JBPM會根據JPDL定義流程自動進行流轉。這裡需要說的對於6個Service,需要熟練掌握,我們都是通過Service的方法進行對錶進行操作的,多看的API文件。
綜上為JBPM4.4的簡單運用,注意對JPDL流程定義圖的畫法屬性掌握和流程變數的處理,6個Service方法屬性的靈活掌握,這樣我們才能對錶中的資料進行靈活的處理。建議初期多觀察觀察表中的資料,對於JBPM處理工作流的流程有個很好的認識,對於更好的駕馭還是非常不錯的。