1. 程式人生 > >JBPM4.4(二)——初步運用

JBPM4.4(二)——初步運用

這篇部落格重點描述一下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定義流程自動進行流轉。這裡需要說的對於6Service,需要熟練掌握,我們都是通過Service的方法進行對錶進行操作的,多看的API文件。

綜上為JBPM4.4的簡單運用,注意對JPDL流程定義圖的畫法屬性掌握和流程變數的處理,6Service方法屬性的靈活掌握,這樣我們才能對錶中的資料進行靈活的處理。建議初期多觀察觀察表中的資料,對於JBPM處理工作流的流程有個很好的認識,對於更好的駕馭還是非常不錯的。