JBPM4.4+SSH 整合配置及完整实例

 整合jBPM4.4+ssh过程(spring接管struts2和hibernate,例中都整合在application.xml中,没有单独的jbpm.hibernate.cfg.xml):

1.在sessionFactory的mappingLocations属性加入以下几个jbpm.*.hbm.xml由jBPM自带

<value>classpath:jbpm.repository.hbm.xml</value>   
<value>classpath:jbpm.execution.hbm.xml</value>   
<value>classpath:jbpm.history.hbm.xml</value>   
<value>classpath:jbpm.task.hbm.xml</value>   
<value>classpath:jbpm.identity.hbm.xml</value>     

2.jBPM自己内部的配置(spring来接管processEngine)

<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
     <bean id="processEngine" factory-bean="springHelper" factory-
             method="createProcessEngine"  />

这样子就配好啦。只要在要用的地方注入processEngine就可以了!简单吧

3.当然为了编程的方便,可以自己写个工具类,直接就可以通过注入这个类来获取所需要的jBPM服务

package com.ht.util;  
  
import java.util.List;  
import java.util.Map;  
import java.util.zip.ZipInputStream;  
import org.jbpm.api.ExecutionService;  
import org.jbpm.api.HistoryService;  
import org.jbpm.api.ManagementService;  
import org.jbpm.api.ProcessDefinition;  
import org.jbpm.api.ProcessEngine;  
import org.jbpm.api.ProcessInstance;  
import org.jbpm.api.RepositoryService;  
import org.jbpm.api.TaskService;  
import org.jbpm.api.task.Task;  
  
/** 
 * jBPM4.4工具类 
 *  
 * @author ht 
 *  
 */  
public class JBPMUtil {  
      
    private ProcessEngine processEngine;  
    private RepositoryService repositoryService = null;  
    private ExecutionService executionService = null;  
    private TaskService taskService = null;  
    private HistoryService historyService = null;  
    private ManagementService managementService = null;  
      
    public JBPMUtil(){  
          
    }  
    public JBPMUtil(ProcessEngine processEngine) {  
        this.processEngine = processEngine;  
        repositoryService = processEngine.getRepositoryService();  
        executionService = processEngine.getExecutionService();  
        taskService = processEngine.getTaskService();  
        historyService = processEngine.getHistoryService();  
        managementService = processEngine.getManagementService();  
    }  
      
    public ProcessEngine getProcessEngine() {  
        return processEngine;  
    }  
  
    public void setProcessEngine(ProcessEngine processEngine) {  
        this.processEngine = processEngine;  
        System.out.println("processEngine="+processEngine);  
        repositoryService = processEngine.getRepositoryService();  
        executionService = processEngine.getExecutionService();  
        taskService = processEngine.getTaskService();  
        historyService = processEngine.getHistoryService();  
        managementService = processEngine.getManagementService();  
    }  
  
    public RepositoryService getRepositoryService() {  
        return repositoryService;  
    }  
  
    public void setRepositoryService(RepositoryService repositoryService) {  
        this.repositoryService = repositoryService;  
    }  
  
    public ExecutionService getExecutionService() {  
        return executionService;  
    }  
  
    public void setExecutionService(ExecutionService executionService) {  
        this.executionService = executionService;  
    }  
  
    public TaskService getTaskService() {  
        return taskService;  
    }  
  
    public void setTaskService(TaskService taskService) {  
        this.taskService = taskService;  
    }  
  
    public HistoryService getHistoryService() {  
        return historyService;  
    }  
  
    public void setHistoryService(HistoryService historyService) {  
        this.historyService = historyService;  
    }  
  
    public ManagementService getManagementService() {  
        return managementService;  
    }  
  
    public void setManagementService(ManagementService managementService) {  
        this.managementService = managementService;  
    }  
      
    /** 
     * 部署新流程定义 
     * @param resourceName 
     * @return 返回流程定义id 
     */  
    public String deployNew(String resourceName) {  
        return repositoryService.createDeployment().addResourceFromClasspath(  
                resourceName).deploy();  
    }  
    
    /** 
     * 部署新流程定义(zip) 
     * @param resourceName 
     * @return 返回流程定义id 
     */  
    public String deployZipNew(String resourceZipName){  
        ZipInputStream zis = new ZipInputStream(this.getClass().getResourceAsStream(resourceZipName));  
        return repositoryService.createDeployment().addResourcesFromZipInputStream(zis).deploy();       
    }   
      
    /** 
     * 开始一个流程实例 
     * @param id 
     * @param map 
     * @return 
     */  
      
    public ProcessInstance startPIById(String id,Map<String,?> map){    
        return executionService.startProcessInstanceById(id, map);           
    }  
      
    /** 
     * 完成任务 
     * @param taskId 
     * @param map 
     */  
      
    public void completeTask(String taskId,Map map){    
        taskService.completeTask(taskId, map);    
    }  
      
    /** 
     * 完成任务 
     * @param taskId 
     */  
    public void completeTask(String taskId){  
        taskService.completeTask(taskId);  
    }  
      
    /** 
     * 将任务流转到指定名字的流程outcome中去 
     * @param taskId 
     * @param outcome 
     */  
    public void completeTask(String taskId,String outcome){  
        taskService.completeTask(taskId, outcome);  
    }  
  
    /** 
     * 获得所有发布了的流程 
     * @return 
     */  
    public List<ProcessDefinition> getAllPdList(){  
        return repositoryService.createProcessDefinitionQuery().list();  
    }  
      
    /** 
     * 获得所有流程实例 
     * @return 
     */  
    public List<ProcessInstance> getAllPiList(){  
        return executionService.createProcessInstanceQuery().list();  
    }  
      
    /** 
     * 根据流程实例Id,即executionId获取指定的变量值 
     * @param executionId 
     * @param variableName 
     * @return 
     */  
    public Object getVariableByexecutionId(String executionId,String variableName){  
        return executionService.getVariable(executionId, variableName);  
    }  
      
    /** 
     * 根据任务id,即taskId获取指定变量值 
     * @param taskId 
     * @param variableName 
     * @return 
     */  
    public Object getVariableByTaskId(String taskId,String variableName){  
        return taskService.getVariable(taskId, variableName);  
    }  
      
    /** 
     * 获取指定用户名字的任务 
     * @param userName 
     * @return 
     */  
    public List<Task> findPersonalTasks(String userName){  
        return taskService.findPersonalTasks(userName);  
    }  
      
    /** 
     * 根据任务id获取任务 
     * @param taskId 
     * @return 
     */  
    public Task getTask(String taskId) {  
        return taskService.getTask(taskId);    
    }    
  
    /** 
     * 级联删除流程定义,直接删除该流程定义下的所有实例 
     *  
     * @param deploymentId  流程定义id 
     */  
    public void deleteDeploymentCascade(String deploymentId) {  
        repositoryService.deleteDeploymentCascade(deploymentId);  
    }        
}  

完整的application.xml:

<?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:p="http://www.springframework.org/schema/p"  
    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">  
  
    <!-- 配置数据源,导入c3p0-0.9.1.2.jar-->  
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
        destroy-method="close">  
        <property name="driverClass">  
            <value>net.sourceforge.jtds.jdbc.Driver</value>  
        </property>  
        <property name="jdbcUrl">  
            <value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=jBPM</value>  
        </property>  
        <property name="user">  
            <value>sa</value>  
        </property>  
        <property name="password">  
            <value>123</value>  
        </property>  
    </bean>  
      
    <bean name="hibernateProperties"  
        class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
        <property name="properties">  
            <props>      
                <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>  
                <prop key="hibernate.show_sql">true</prop>  
                <prop key="hibernate.hbm2ddl.auto">update</prop>   
  
            </props>  
        </property>  
    </bean>  
      
    <!-- spring集成hibernate配置 -->  
    <bean id="sessionFactory"  
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <property name="hibernateProperties" ref="hibernateProperties" />  
        <property name="mappingLocations">  
            <list>  
                <value>classpath*:com/ht/entity/*.hbm.xml</value>  
                <!-- 以下几个jbpm.*.hbm.xml由jBPM自带 -->  
                <value>classpath:jbpm.repository.hbm.xml</value>     
                <value>classpath:jbpm.execution.hbm.xml</value>     
                <value>classpath:jbpm.history.hbm.xml</value>     
                <value>classpath:jbpm.task.hbm.xml</value>     
                <value>classpath:jbpm.identity.hbm.xml</value>   
            </list>  
        </property>  
    </bean>    
  
    <!-- jbpm配置 -->  
    <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />  
    <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine"  />  
      
    <bean id="jBPMUtil" class="com.ht.util.JBPMUtil">  
        <property name="processEngine" ref="processEngine"></property>  
    </bean>  
  
    <!-- 事务配置 -->  
    <bean id="transactionManager"  
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory" />  
    </bean>  
</beans>  

本文转自:http://hellotommy.iteye.com/blog/804233

posted @ 2014-10-15 09:58  彼岸的命運╰'  阅读(666)  评论(0编辑  收藏  举报