因為工作的關係,需要使用jbpm,可自己以前根本就沒有接觸過,算是從零開始吧。以後會記下的學習中的點滴,我使用的教程是《jBPM jPDL 使用者開發手冊 3.2.3 》的中譯版,說實話,有的地方譯的的確不怎麼樣,但總比自己慢慢看英文要快,現在講的是效率,而且作者算是個有心的人。
下載:(jbpm sourceforge 檔案清單)
jbpm-jpdl-suite-3.2.3.zip
沒有什麼特殊原因,教程中用的就是這個版本,配套嘛。
eclipse-jee-europa-winter-win32.zip
要使用jbpm 3.2.3的設計器外掛程式,需要eclipse 3.3版本的支援,只能暫時擱置eclipse 3.5了。
安裝:
當然,使用jbpm的前提是你已經安裝並配置了jdk,這個不必多談吧,
- 解壓jbpm-jpdl-stuite-3.2.3.zip。
- 解壓eclipse-jee-europa-winter-win32.zip
- 安裝圖形設計器外掛程式。將解壓後的designer目錄下的eclipse檔案夾中的內容複寫到eclipse 3.3的根目錄下,重啟eclipse,即可完成外掛程式的安裝。外掛程式安裝後,可以在建立對話方塊中找到jbpm的相關項目。 在Eclipse的“window > Preferences”中展開“JBoss jBPM”分支,添加一個Runtime Location,路徑為jbpm-jpdl-stuite-3.2.3解壓後的路徑。 可以在Server Deployment分支中看到jbpm的布署配置
將jbpm-jpdl-stuite-3.2.3.zip解壓後的designer目錄下的eclipse檔案夾中的內容複寫到eclipse 3.3的根目錄下,重啟eclipse,即可完成外掛程式的安裝。外掛程式安裝後,可以在建立對話方塊中找到jbpm的相關項目。
- 配置jBPM外掛程式運行環境。
在Eclipse的“window > Preferences”中展開“JBoss jBPM”分支,添加一個Runtime Location,路徑為jbpm-jpdl-stuite-3.2.3解壓後的路徑。可以在Server Deployment分支中看到jbpm的布署配置 。
Hello,World:
以教程中的Hello,World為例,流程如下。
在eclipse中建立一個“Process Project”項目,然後建立一個HelloWorld類。
package org.zym.helloworld;<br />import org.jbpm.graph.def.ProcessDefinition;<br />import org.jbpm.graph.exe.ProcessInstance;<br />import org.jbpm.graph.exe.Token;<br />import junit.framework.TestCase;<br />public class HelloWorld extends TestCase {<br /> public void testHelloWorldProcess() {<br /> // 這個方法顯示一個流程定義和一個流程定義的執行。<br /> // 流程定義有三個節點:<br /> // 未命名的start-state, state's'和命名為'end'的end-state節點<br /> // 下一行解析xml文本到ProcessDefinition類<br /> // ProcessDefinition是作為java對象的流程的正規描述。<br /> String xml = "<process-definition>" + "<start-state>"<br /> + "<transition to='s'/>" + "</start-state>"<br /> + "<state name='s'>" + "<transition to='end'/>" + "</state>"<br /> + "<end-state name='end'/>" + "</process-definition>";<br /> ProcessDefinition processDefinition = ProcessDefinition<br /> .parseXmlString(xml);<br /> // 下一行建立一個流程定義的執行,在建立後,流程執行有一個執行的主路徑<br /> // (=root token),定位在start-state節點位置。<br /> ProcessInstance processInstance = new ProcessInstance(processDefinition);<br /> // 建立流程執行的主路徑(=root token)<br /> Token token = processInstance.getRootToken();<br /> // 在建立流程定義後,確定主路徑牌開始狀態節點處<br /> assertSame(processDefinition.getStartState(), token.getNode());<br /> // 讓我們開始流程執行,通過它的預設流程轉換離開開始節點<br /> token.signal();<br /> // signal方法將阻止直到流程執行進入一個等待狀態<br /> // 所以執行的主路徑現在定位在狀態's'<br /> assertSame(processDefinition.getNode("s"), token.getNode());<br /> // 讓我們發送一個訊號。假設執行離開狀態's'通過預設的流程轉換<br /> token.signal();<br /> // 現在資訊方法返回,因為這個流程執行個體已經到達結束節點(end-state)<br /> assertSame(processDefinition.getNode("end"), token.getNode());<br /> }<br />}
使用JUnit運行這個hello,world即可。