最近工作項目中需要用到工作流。於是找到了jbpm。關於jbpm的一些概念就不說了
1) 首先下載jbpm,這里我選擇了jbpm4.4 從官網上可以下載 http://sourceforge.net/projects/jbpm/files/
下載完了之后,打開文件目錄

doc: 文檔說明
example:項目例子
install:安裝的所需 , 如eclipse插件,數據庫腳本
lib:依賴包
src:源碼
2) 下載完了,開始吧 jbpm插件安裝到eclipse中
Help-install new Software

3) 插件安裝好了, 開始配置jbpm數據庫 , 我用的sqlserver,數據庫JBPMTEST 。
4) 數據庫建好。新建一個java項目,導入jbpm 目錄下lib的jar包以及 jbpm.jar到自己的項目環境中
5) 然后copy jbpm目錄下jbpm-4.4\examples\src 下的

導入到自己項目中的src下
6) 最后修改一下 jbpm.hibernate.cfg.xml 這個配置文件,修改下數據庫配置信息,這里需要注意一個屬性
<property name="hibernate.hbm2ddl.auto">create-drop</property>
值為create-drop 會自動把數據庫原先jbpm表刪掉再新建
至此 ,jbpm配置也算搞定了 。下面開始寫代碼進行test吧
項目結構

建一個 test 的 jpdl 流程定義文件 ,JBPMTEST為程序入口進行測試
發布流程,
ProcessEngine engine;
public JBPMTEST() {
engine=new Configuration().getProcessEngine();
}
public void setUp(){
engine.getRepositoryService().createDeployment()
.addResourceFromClasspath("com/aoy/resource/jbpm/test.jpdl.xml").deploy();
}
查詢已發布的流程
public void pdList(){
List<ProcessDefinition> definitions = engine.getRepositoryService().createProcessDefinitionQuery().list();
for (int i = 0; i < definitions.size(); i++) {
System.out.println(definitions.get(i).getDeploymentId());
System.out.println(definitions.get(i).getDescription());
System.out.println(definitions.get(i).getId());
System.out.println(definitions.get(i).getName());
}
}
啟動流程實例
public void testStartProcessInstance(){
Map instanceVariables = new HashMap();
instanceVariables.put("leaver", "小明"); //請假者
instanceVariables.put("leaveDays", 7); //請假天數
instanceVariables.put("reason", "老婆生孩子"); //請假事項/原因
//啟動流程實例
ProcessInstance processInstance
=engine.getExecutionService().startProcessInstanceByKey("test", instanceVariables);
System.out.println("流程實例"+processInstance.getId()+"創建!");
System.out.println(processInstance.getKey());
System.out.println(processInstance.getName());
System.out.println(processInstance.getProcessDefinitionId());
System.out.println(processInstance.getState());
System.out.println(processInstance.getPriority());
}
查詢已經啟動的流程實例
public void piList(){
List<ProcessInstance> pis=engine.getExecutionService().createProcessInstanceQuery().list();
for (ProcessInstance processInstance : pis) {
// System.out.println(processInstance.getIsProcessInstance());
System.out.println(processInstance.getId());
System.out.println(processInstance.getExecutionsMap());
}
