zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    leetcode206题实现反转链表(c语言)
    V22017编写C/C++时没有与参数列表匹配的重载函数实例
    3DMAX导出到Unity坐标轴转换问题
    ihandy2019笔记编程真题
    模糊数学中合成算子的计算方法
    点击Button按钮实现页面跳转
    做HTML静态页面时遇到的问题总结
    pip换源
    Python正课146 —— DRF 进阶7 JWT补充、基于权限的角色控制、django缓存
    Python正课145 —— DRF 进阶6 自定制频率、接口文档、JWT
  • 原文地址:https://www.cnblogs.com/dreammyle/p/4025714.html
Copyright © 2011-2022 走看看