zoukankan      html  css  js  c++  java
  • activiti初学

        公司现有的工作流是比较老的JBPM,用起来不太方便,经常性的流程跑一半就停止不前了。闲暇之余学习下activiti的使用,基本配置如下:

    1、创建pom.xml文件所依赖的jar包

      1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      3   <modelVersion>4.0.0</modelVersion>
      4   <groupId>com.ccb</groupId>
      5   <artifactId>activiti</artifactId>
      6   <packaging>war</packaging>
      7   <version>0.0.1-SNAPSHOT</version>
      8   <name>activiti Maven Webapp</name>
      9   <url>http://maven.apache.org</url>
     10   <dependencies>
     11       <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
     12     <dependency>
     13         <groupId>org.springframework</groupId>
     14         <artifactId>spring-core</artifactId>
     15         <version>4.3.14.RELEASE</version>
     16     </dependency>
     17     <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
     18     <dependency>
     19         <groupId>org.springframework</groupId>
     20         <artifactId>spring-context</artifactId>
     21         <version>4.3.14.RELEASE</version>
     22     </dependency>
     23     <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
     24     <dependency>
     25         <groupId>org.springframework</groupId>
     26         <artifactId>spring-test</artifactId>
     27         <version>4.3.14.RELEASE</version>
     28         <scope>test</scope>
     29     </dependency>
     30     <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
     31     <dependency>
     32         <groupId>org.springframework</groupId>
     33         <artifactId>spring-tx</artifactId>
     34         <version>4.3.14.RELEASE</version>
     35     </dependency>
     36     <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
     37     <dependency>
     38         <groupId>org.springframework</groupId>
     39         <artifactId>spring-beans</artifactId>
     40         <version>4.3.14.RELEASE</version>
     41     </dependency>
     42     
     43     <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
     44     <dependency>
     45         <groupId>org.mybatis.generator</groupId>
     46         <artifactId>mybatis-generator-core</artifactId>
     47         <version>1.3.5</version>
     48     </dependency>
     49     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
     50     <dependency>
     51         <groupId>org.mybatis</groupId>
     52         <artifactId>mybatis-spring</artifactId>
     53         <version>1.3.1</version>
     54     </dependency>
     55     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
     56     <dependency>
     57         <groupId>org.mybatis</groupId>
     58         <artifactId>mybatis</artifactId>
     59         <version>3.4.5</version>
     60     </dependency>
     61     
     62     
     63 
     64     <dependency>
     65       <groupId>junit</groupId>
     66       <artifactId>junit</artifactId>
     67       <version>4.12</version>
     68       <!-- <scope>test</scope> -->
     69     </dependency>
     70   <!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-converter -->
     71     <dependency>
     72         <groupId>org.activiti</groupId>
     73         <artifactId>activiti-bpmn-converter</artifactId>
     74         <version>6.0.0</version>
     75     </dependency>
     76   <!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-model -->
     77     <dependency>
     78         <groupId>org.activiti</groupId>
     79         <artifactId>activiti-bpmn-model</artifactId>
     80         <version>6.0.0</version>
     81     </dependency>
     82     <!-- https://mvnrepository.com/artifact/org.activiti/activiti-image-generator -->
     83     <dependency>
     84         <groupId>org.activiti</groupId>
     85         <artifactId>activiti-image-generator</artifactId>
     86         <version>6.0.0</version>
     87     </dependency>
     88      <!-- https://mvnrepository.com/artifact/org.activiti/activiti-process-validation -->
     89     <dependency>
     90         <groupId>org.activiti</groupId>
     91         <artifactId>activiti-process-validation</artifactId>
     92         <version>6.0.0</version>
     93     </dependency>
     94     <!-- https://mvnrepository.com/artifact/log4j/log4j -->
     95     <dependency>
     96         <groupId>log4j</groupId>
     97         <artifactId>log4j</artifactId>
     98         <version>1.2.17</version>
     99     </dependency>
    100     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    101     <dependency>
    102         <groupId>org.slf4j</groupId>
    103         <artifactId>slf4j-log4j12</artifactId>
    104         <version>1.7.25</version>
    105         <scope>test</scope>
    106     </dependency>
    107     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    108     <dependency>
    109         <groupId>org.slf4j</groupId>
    110         <artifactId>slf4j-api</artifactId>
    111         <version>1.7.25</version>
    112     </dependency>
    113     <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    114     <dependency>
    115         <groupId>mysql</groupId>
    116         <artifactId>mysql-connector-java</artifactId>
    117         <version>5.1.38</version>
    118     </dependency>
    119     <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
    120     <dependency>
    121         <groupId>commons-dbcp</groupId>
    122         <artifactId>commons-dbcp</artifactId>
    123         <version>1.4</version>
    124     </dependency>
    125 <!--     <dependency>
    126        <groupId>org.activiti</groupId>
    127        <artifactId>activiti-root</artifactId>
    128        <version>6.0.0</version>
    129     </dependency> -->
    130     
    131     <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring -->
    132     <dependency>
    133         <groupId>org.activiti</groupId>
    134         <artifactId>activiti-spring</artifactId>
    135         <version>6.0.0</version>
    136     </dependency>
    137     <!-- https://mvnrepository.com/artifact/org.activiti/activiti-engine -->
    138     <dependency>
    139         <groupId>org.activiti</groupId>
    140         <artifactId>activiti-engine</artifactId>
    141         <version>6.0.0</version>
    142     </dependency>
    143     
    144   </dependencies>
    145   <build>
    146     <finalName>activiti</finalName>
    147     <plugins>
    148         <plugin>
    149             <groupId>org.apache.maven.plugins</groupId>
    150             <artifactId>maven-compiler-plugin</artifactId>
    151             <configuration>
    152                 <source>1.8</source>
    153                 <target>1.8</target>
    154             </configuration>
    155         </plugin>
    156     </plugins>
    157     <!-- maven加载src下的xml文件 -->
    158     <resources>
    159         <resource>
    160             <directory>src/main/java</directory>
    161             <includes>
    162                 <include>**/*.xml</include>
    163             </includes>
    164         </resource>
    165     </resources>
    166   </build>
    167 </project>
    pom.xml

    注意加载日志包时log4j和slf4j的版本匹配,启动服务时需要依赖log4j.properties配置文件。

    这里使用的mybatis框架,数据库使用的mysql。

    2、activiti.cfg.xml核心配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans
     6        http://www.springframework.org/schema/beans/spring-beans.xsd
     7        http://www.springframework.org/schema/mvc
     8        http://www.springframework.org/schema/mvc/spring-mvc.xsd
     9        http://www.springframework.org/schema/context 
    10        http://www.springframework.org/schema/context/spring-context.xsd">    
    11        <!--配置数据源-->    
    12        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">        
    13                <property name="driverClassName" value="com.mysql.jdbc.Driver"/>      
    14                <!--配置数据库中的中文乱码-->        
    15                <property name="url" value="jdbc:mysql://localhost:3306/activiti? useUnicode=true&amp;characterEncoding=UTF-8"/>        
    16                <property name="username" value="root"/>        
    17                <property name="password" value="123456lq"/>        
    18                <property name="maxActive" value="3"/>        
    19                <property name="maxIdle" value="1"/>
    20                <property name="defaultAutoCommit" value="false"></property>    
    21            </bean>  
    22            <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">        
    23                <property name="dataSource" ref="dataSource"/>
    24                <property name="transactionManager" ref="transactionManager"></property>        
    25                <property name="databaseSchemaUpdate" value="true"/>    
    26            </bean>  
    27            <!-- <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">        
    28                <property name="dataSource" ref="dataSource"/>        
    29                <property name="databaseSchemaUpdate" value="true"/>    
    30            </bean>  -->
    31            <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    32                <property name="dataSource" ref="dataSource"></property>
    33            </bean>
    34 </beans>
    activiti.cfg.xml

    这里使用的是dbcp连接池,也可以自行配置其他的。

    3、初始化数据库表执行类

     1 package com.ccb.commons;
     2 
     3 import org.activiti.engine.ProcessEngine;
     4 import org.activiti.engine.ProcessEngineConfiguration;
     5 import org.junit.Test;
     6 
     7 /**
     8  * 初始化MYSQL数据库中activiti工作流需要用到的表28个
     9  * @author 刘强
    10  *
    11  */
    12 public class CreateInitTableUtils {
    13     //private static final Logger log =LoggerFactory.getLogger(CreateInitTableUtils.class);
    14     @Test
    15     public void createTable(){
    16         ProcessEngineConfiguration configuration =
    17         ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
    18         ProcessEngine processEngine = configuration.buildProcessEngine();
    19         //log.info(processEngine.toString());
    20         System.out.println(processEngine);
    21     }
    22 }
    CreateInitTableUtils.java

    4、spring-servlet.xml配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:aop="http://www.springframework.org/schema/aop"
     6     xmlns:p="http://www.springframework.org/schema/p"
     7     xmlns:tx="http://www.springframework.org/schema/tx"
     8     xmlns:jee="http://www.springframework.org/schema/jee"
     9     
    10     xsi:schemaLocation="http://www.springframework.org/schema/beans
    11         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    12         http://www.springframework.org/schema/context
    13         http://www.springframework.org/schema/context/spring-context-4.0.xsd
    14         http://www.springframework.org/schema/jee
    15         http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
    16         
    17         http://www.springframework.org/schema/aop
    18         http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
    19         http://www.springframework.org/schema/tx
    20         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
    21        <!-- 注解方法,暂未开启 -->
    22        <!--  <mvc:annotation-driven/>
    23         <mvc:default-servlet-handler/> -->
    24         <!-- 解决返回jsp页面省略后缀写法 -->
    25         <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    26         <property name="prefix" value="/"></property>
    27         <property name="suffix" value=".jsp"></property>
    28         </bean>
    29         <!-- 支持文件上传 -->
    30         <bean id="multipartResolver"
    31         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    32         <!-- one of the properties available; the maximum file size in bytes -->
    33         <property name="maxUploadSize" value="5000000"/>
    34 
    35         </bean>
    36         
    37         
    38         <!-- 需要扫描的包 -->
    39         <context:component-scan base-package="com.ccb.*.dao"></context:component-scan>
    40         
    41         <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">        
    42                <property name="driverClassName" value="com.mysql.jdbc.Driver"/>      
    43                <!--配置数据库中的中文乱码-->        
    44                <property name="url" value="jdbc:mysql://localhost:3306/activiti? useUnicode=true&amp;characterEncoding=UTF-8"/>        
    45                <property name="username" value="root"/>        
    46                <property name="password" value="123456lq"/>        
    47                <property name="maxActive" value="3"/>        
    48                <property name="maxIdle" value="1"/>
    49                <property name="defaultAutoCommit" value="false"></property>    
    50            </bean>  
    51         <!-- 加载配置的 *.mbm.xml文件-->
    52         <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    53             <property name="dataSource" ref="datasource"></property>
    54             <property name="mapperLocations">
    55                 <list>
    56                     <value>classpath:com.ccb.activiti.dto/*.mbm.xml</value>
    57                 </list>
    58             </property>
    59             <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    60         </bean>
    61         <!-- <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">  
    62                 <constructor-arg index="0">  
    63                         <ref bean="sqlSessionFactory" />  
    64                 </constructor-arg>  
    65         </bean> -->  
    66   
    67         <!-- 动态代理实现 不用写dao的实现   -->
    68         <bean id="MapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
    69                <!--  这里的basePackage 指定了dao层接口路劲,这里的dao接口不用自己实现 -->  
    70                 <property name="basePackage" value="com.ccb.activiti.dao" />  
    71                <!--  如果只有一个数据源的话可以不用指定,但是如果有多个数据源的话必须要指定 -->  
    72                 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />  
    73               <!--   直接制定了sqlsessionTemplate名称,这个和上面的其实是一样的 -->  
    74                 <property name="sqlSessionTemplateBeanName" value="sqlSession" />  
    75         </bean>
    76         <!-- 事物管理 -->
    77         <tx:annotation-driven transaction-manager="transactionManager"/>
    78         <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    79             <property name="dataSource" ref="datasource"></property>
    80         </bean>
    81  </beans>
    spring-servlet.xml

    5、具体业务逻辑封装管理类

     1 package com.ccb.commons;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.util.zip.ZipInputStream;
     7 
     8 import org.activiti.engine.FormService;
     9 import org.activiti.engine.HistoryService;
    10 import org.activiti.engine.IdentityService;
    11 import org.activiti.engine.ManagementService;
    12 import org.activiti.engine.ProcessEngine;
    13 import org.activiti.engine.ProcessEngineConfiguration;
    14 import org.activiti.engine.RepositoryService;
    15 import org.activiti.engine.RuntimeService;
    16 import org.activiti.engine.TaskService;
    17 import org.activiti.engine.repository.Deployment;
    18 import org.springframework.context.ApplicationContext;
    19 import org.springframework.context.support.ClassPathXmlApplicationContext;
    20 
    21 /**
    22  * 具体业务逻辑封装管理类
    23  * @author 刘强
    24  *
    25  */
    26 public class ProjectInitManager {
    27     
    28     private ApplicationContext applicationContext;
    29     
    30     private ProcessEngineConfiguration configuration;
    31 
    32     public ProjectInitManager() {
    33         applicationContext = new ClassPathXmlApplicationContext(new String[]{"spring-mabatis.xml"});
    34         configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
    35     }
    36     public Object getBeanByName(String name){
    37         return applicationContext.getBean(name);
    38     }
    39     
    40     public ProcessEngine getProcessEngine(){
    41         return configuration.buildProcessEngine();
    42     }
    43     
    44     //发布流程
    45     public void deployProcess(String ProcessFileName){
    46         InputStream inputStream = 
    47                 this.getClass().getClassLoader().getResourceAsStream(ProcessFileName);
    48         getProcessEngine().getRepositoryService().createDeployment()
    49                 .addInputStream(ProcessFileName, inputStream).deploy();
    50     }
    51     
    52     //批量发布流程
    53     public void deployProcessByZip(String processFileName) throws IOException{
    54         ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(processFileName));
    55         Deployment deployment = 
    56                 getProcessEngine().getRepositoryService().createDeployment()
    57                 .addZipInputStream(zipInputStream).deploy();
    58         
    59     }
    60     
    61     public RepositoryService getRepositoryService(){
    62         return getProcessEngine().getRepositoryService();
    63     }
    64     
    65     public FormService getFormService(){
    66         return getProcessEngine().getFormService();
    67     }
    68     
    69     public HistoryService getHistoryService(){
    70         return getProcessEngine().getHistoryService();
    71     }
    72     
    73     public IdentityService getIdentityService(){
    74         return getProcessEngine().getIdentityService();
    75     }
    76     
    77     public ManagementService getManagementService(){
    78         return getProcessEngine().getManagementService();
    79     }
    80     
    81     public RuntimeService getRuntimeService(){
    82         return getProcessEngine().getRuntimeService();
    83     }
    84     
    85     public TaskService getTaskService(){
    86         return getProcessEngine().getTaskService();
    87     }
    88     //初始化数据库
    89     public void initActivitiData(){
    90         getProcessEngine();
    91     }
    92 }
    ProjectInitManager.java

    其他的具体实现类,controller,service,dao层逻辑就不一一列举了。

  • 相关阅读:
    转:ITIL的開源軟件
    转:Asp.Net大型项目实践
    转:Ubuntu上apache多端口配置虚拟主机的方法
    转:JS 获取鼠标位置
    转:一切整合分享到新浪网易微博代码
    转:Facebook是如何发布代码的
    转:利用 Amazon Web Services 集成企业应用程序使用 Amazon SQS 发送 XML 消息
    sqlite3 常用操作
    转:4 款消息队列软件产品大比拼
    SQL Server 2008 列转行 实例
  • 原文地址:https://www.cnblogs.com/lq147760524/p/8637583.html
Copyright © 2011-2022 走看看