JBPM 4 使用小结

[size=medium][size=large][size=medium]JBPM 4.4 总结

1、 JBPM简介
1) JBOSS开发的Java工作流引擎
2) 包含可视化的流程设计界面
3) 使用Hibernate作为底层的持久层框架

2、 主要API介绍与使用
JBPM的主要API在包org.jbpm.api.*和org.jbpm.api.task.*下。

1)ProcessEngine:流程引擎。是JBPM上层类,相当于Hibernate的SessionFactory级别。
获得方式:
ProcessEngine processEngine = Configuration.getProcessEngine();
Configuration类会读取classpath下的jbpm.cfg.xml文件进行流程引擎的加载。ProcessEngine是单例模式,即整个系统只会有一个processEngine实例。

2)RepositoryService:流程发布服务,是ProcessEngine接下来的环节。
获得方式:
RepositoryService repositoryService = processEngine.getRepositoryService();
发布一个流程:
String deploymentId = repositoryService.createDeployment(). addResourceFromClasspath("helloworld.jpdl.xml").deploy();
deploymentId是发布的流程返回的ID号。
查看所有流程定义(ProcessDefinition):
List<ProcessDefinition> list = repositoryService. createProcessDefinitionQuery().list();
删除流程定义(根据流程定义的ID号级联删除):
repositoryService.deleteDeploymentCascade(processDefinition.getDeploymentId());

3)ExecutionService:流程实例服务。能够启动、结束流程实例的执行。
获得方式:
ExecutionService executionService = processEngine. getExecutionService();
根据流程定义的key启动一个流程实例并返回流程实例对象:
ProcessInstance pi = executionService. startProcessInstanceByKey("helloworld");
其中helloworld就是对helloworld.jbdl.xml进行流程定义后的key值。
获得所有流程实例:
List<ProcessInstance> list = executionService. createProcessInstanceQuery().list();
终止流程实例:
executionService.endProcessInstance(processInstanceId, "cancel");
其中processInstanceId是流程实例的ID号,”cancal”是终止的原因,可以随意填写。
唤醒处于等待状态的流程实例,使之继续执行,并返回流程实例对象:
processInstance = executionService. signalExecutionById(processInstanceId);
删除流程实例
executionService.deleteProcessInstanceCascade(processInstanceId);

4)TaskService:任务服务,能够处理流程实例各个阶段的任务。
获得方式:
TaskService taskService = processEngine.getTaskService();
根据分配人(assignee)查找相应的任务列表:
List<Task> taskList = taskService.findPersonalTasks(assignee);
完成此阶段任务:
taskService.completeTask(taskId, params);
其中taskId是当前任务的ID号,params是一个Map<String, ?>对象,用于完成任务时传递的参数集合。完成此任务后就会进入下一个任务。

3、 在Eclipse中使用JBPM

1) 安装插件
在JBPM软件包下,找到\install\src\gpd\jbpm-jpd-site.zip文件
打开Eclipse,点Help——Install New SoftWare,右侧点Add,将上述zip文件添加,然后选中复选框安装全部,一路next即可。

2) 新建流程定义
New——Other,找到Jboss JBPM,选JBPM4 Process Definition即可新建流程定义。注意:在可视化编辑环境中,输入的中文在XML中可能乱码,此时需要修改eclipse.ini文件,在最后添加:
-Dfile.encoding=UTF-8
即可解决中文乱码问题。

3) 将JBPM使用的内存数据库转移到物理数据库中
找到\install\src\db\create\jbpm.mysql.create.sql文件,使用MySQL创建一个数据库,然后执行上述SQL脚本。接着,修改jbpm.hibernate.cfg.xml文件,将数据源改成MySQL的即可完成。

4) 解决JBPM中EL和Tomcat中EL签名冲突的问题
将JBPM lib包下的juel-api.jar,juel-engine.jar,juel-impl.jar拷贝至tomcat的lib目录下,同时在项目的Build Path中删除掉这三个JAR包。

4、 JBPM和Spring的整合

1) 修改jbpm.cfg.xml
删除掉<import resource="jbpm.tx.hibernate.cfg.xml" />,而添加:
<import resource="jbpm.tx.spring.cfg.xml" />,这样交给Spring去管理。

2) 编写applicationContext.xml
必须要配置数据源dataSourse,session工厂sessionFactory和事务管理器transactionManager。然后创建SpringHelper,ProcessEngine,RepositoryService,executionService的实例。代码如下:(特别注意:代码中的hibernate.dialect不是原本的MySQLDialect,而改成MySQLInnoDBDialect,这样做是防止在结束任务或流程时级联删除相应的数据,而产生的外键约束导致的删除/更新异常)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/jbpm" />
<property name="username" value="root" />
<property name="password" value="123456" />
<property name="initialSize" value="1" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="8" />
<property name="minIdle" value="1" />
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>jbpm.repository.hbm.xml</value>
<value>jbpm.execution.hbm.xml</value>
<value>jbpm.history.hbm.xml</value>
<value>jbpm.task.hbm.xml</value>
<value>jbpm.identity.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect </prop>
<prop key="hibernate.show_sql">true</prop>

</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">

</bean>

<bean id="processEngine" factory-bean="springHelper"
factory-method="createProcessEngine">
</bean>

<bean id="repositoryService" factory-bean="processEngine"
factory-method="getRepositoryService" />
<bean id="executionService" factory-bean="processEngine"
factory-method="getExecutionService" />

3) 测试整合
编写一个主函数,添加如下代码:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ProcessEngine processEngine = (ProcessEngine) context.getBean("processEngine");
System.out.println(processEngine);如果打印输出信息,不报异常,则配置成功。

5、 JBPM和Struts、Spring、Hibernate、JPA的整合

1) 添加必要的JAR包和文件

2) 创建JBPM表到数据库
按照3.3节所述,将JBPM相关数据表建立在原有项目的数据库中

3) 创建JBPM配置文件
建立另一个Spring配置文件applicationContext.xml用来配置JBPM,原有的Spring-JPA配置文件换个名字,比如beans.xml等。按照第四章所述在applicationContext中创建相应JBPM配置,注意,这里的数据源要与原有配置文件中的数据源保持一致。

4) 修改web.xml
由于有两个Spring配置文件,所以要在web.xml中让Spring容器去加载两个配置文件,代码如下:
<!-- Spring容器的初始化,指定配置文件的路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
</context-param>
<param-value>classpath:beans.xml, classpath:applicationContext.xml
</param-value>

<!-- 对Spring容器进行实例化 -->
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>[size=x-small][/size][size=small][/size][size=medium][/size]
</listener>
注意两个文件路径用逗号隔开,并都要指明classpath或其他路径。[/size][/size][/size]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值