Myeclipse8.5搭建jbpm4.4的开发环境

来源:互联网 发布:mac怎么进硬件检测模式 编辑:程序博客网 时间:2024/06/07 07:41

jbpm版本:4.4

IDE:myeclipse8.6

DB:mysql-5.0.26

1、Myeclipse中安装jbpm

1)、到http://sourceforge.net/projects/jbpm上去下载jbpm4.4,并解压。

2)、打开myeclipse8.6---->选择Help菜单---->选择Myeclipse Configuration Center------>打开第三个选项卡SoftWare----->选择右上角add site---->选折add form archive file-----》找到${jbpm_home}\install\src\gpd 目录下找到jbpm-gpd-site.zip即可!name随便输入即可(比如我输入 jbpm)!这样下面就看到多一个jbpm(部分过程看下图 )

Myeclipse8.6搭建jbpm4.4的开发环境

选择“add site”,弹出如下对话框:

Myeclipse8.6搭建jbpm4.4的开发环境

选择“Add from Archive File”,弹出如下对话框:

Myeclipse8.6搭建jbpm4.4的开发环境

选择“打开”,弹出如下对话框:

Myeclipse8.6搭建jbpm4.4的开发环境

选择“OK”,出现如下对话框:

Myeclipse8.6搭建jbpm4.4的开发环境

3)、一个一个选中jpd下面的文件,点击右击“add to profile”即可!

4)、点击右下角“apply change”按钮即可!(注:在更新的时候一定要断开网络。我在没断开网络的前提下,装了好几遍,装完Myeclipse下创建web工程的栏目就不见了)。

安装完成后会重启Myeclipse,重启后在新建项目里会多出一项“JBoss jBPM”,如下图所示:

Myeclipse8.6搭建jbpm4.4的开发环境

2、配置jBPM运行时 
点击 Window --> Preferences 
选择 JBoss jBPM --> jBPM 4.4 --> Runtime Locations 
点击 Add... 
在 Add Location 对话框中,输入一个名字,比如 jbpm-4.4 然后点击 Search... 
在 Browse For Folder 对话框中,选择你的jbpm根目录,然后点击 OK 
点击 OK 在 Add Location 对话框中
Myeclipse8.6搭建jbpm4.4的开发环境 - 气体分子 - 气体分子

3、生成jbpm数据库表(这里以安装mysql为列)

a)、先打开mysql数据库新建一个数据库比如jbpm(create database jbpm);

b)、打开${jbpm_home}\install\src\db\create 下面,找到mysql的表脚本!

c)、全部复制过来粘贴到mysql命令行上(当然也可以source ***.sql方式),

4、helloWorld程序

新建一个java project  项目名称为helloJbpm

a:首先导入相应的jar包(导入$(jbpm_home)\lib目录下面的所有jar包和$(jbpm_home}下面的jbpm.jar包到项目中去)

b:导入配置文件(导入${Jbpm_home}\examples\src目录下面的所有配置文件到项目导入src目录下面,然后修改jbpm.hibernate.cfg.xml里面的driver,用户名,密码,数据库名(可以参考${JBPM-home}\install\jdbc目录下面的mysql.properties文件))

c:设计流程文件

选择new-->jbpss jbpm--->jbpm4 process definition文件即可

xml代码:

Java代码

  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <process name="hello" xmlns="http://jbpm.org/4.0/jpdl">   
  3.    <start g="112,33,88,48" name="start1">   
  4.       <transition g="-77,-17" name="to family168" to="family168"/>   
  5.    </start>   
  6.    <state g="122,293,92,52" name="family168">   
  7.       <transition g="-47,-17" name="to end1" to="end1"/>   
  8.    </state>   
  9.    <end g="122,400,48,48" name="end1"/>   
  10. </process>  

d:写一个测试类

Java代码

package com.baihe.jbpm;    
   
import java.util.List;    
import org.jbpm.api.Configuration;    
import org.jbpm.api.Execution;    
import org.jbpm.api.ExecutionService;    
import org.jbpm.api.ProcessDefinition;    
import org.jbpm.api.ProcessEngine;    
import org.jbpm.api.ProcessInstance;    
import org.jbpm.api.RepositoryService;    
import org.junit.Before;    
import org.junit.BeforeClass;    
import org.junit.Test;    
   
public class HelloWorldTest {    
    private static ProcessEngine processEngine;    
    private static  ExecutionService executeServices ;    
        
    @BeforeClass   
    public static void setUpBeforeClass() throws Exception {    
        processEngine = Configuration.getProcessEngine();//通过单列模式获得流程引擎    
        executeServices = processEngine.getExecutionService();    
    }    
   
    @Before   
    public void setUp() throws Exception {    
    }    
        
    @Test   
    public void testDeployProcess(){    
        //RepositoryService功能:主要对流程文件进行发布,查看,删除等!    
       RepositoryService  repositoryService = processEngine.getRepositoryService();    
        //因为helloword.jpdl.xml文件在  classpath目录下就可以直接这样写,如果不在的话应该加上包名    
        //返回已经发布的流程的id    
        String processId = repositoryService.createDeployment().addResourceFromClasspath("hello.jpdl.xml").deploy();    
        //查看已经发布流程的列表    
        List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();    
            
        System.out.println("已经发布的流程数量为:"+list.size());    
        for(ProcessDefinition pd:list){    
            System.out.println("发布流程的名称:"+pd.getName()+",发布流程id"+pd.getId());               
        }    
        repositoryService.createProcessDefinitionQuery();    
        //根据流程id来删除已经发布的流程    
        //repositoryService.deleteDeployment(processId)    
        //repositoryService.deleteDeploymentCascade("processId");    
        //repositoryService.suspendDeployment(processId);这个等价于删除一个流程    
        //System.out.println("已经发布的流程数量为:"+repositoryService.createProcessDefinitionQuery().list().size());    
           
            
    }     
   @Test   
    public void testProcessInstance(){         
           
        ProcessInstance processInstance = executeServices.startProcessInstanceByKey("helloworld");    
        List<ProcessInstance> list = executeServices.createProcessInstanceQuery().list();    
        for(ProcessInstance pi:list){    
            System.out.println("流程实例名称:"+pi.getName()+",流程实例key:"+pi.getKey()+",流程实例version:"+pi.getState()+":");    
        }    
        //结束流程实例     
        //executeServices.endProcessInstance(processInstance.getId(), "cancel");    
        //删除流程实例    
        //executeServices.deleteProcessInstance(processInstance.getId());    
        //System.out.println(executeServices.createProcessInstanceQuery().list().size());    
        System.out.println(processInstance.isActive("state1"));    
        executeServices.signalExecutionById(processInstance.getId());    
           
    }    
             
}