Activiti实战二---搭建Activiti开发环境,HelloWorld

一、运行软件

  开发软件:Spring Tool Suite  3.7.0.RELEASE

  数据库:MySQL 5.7

  JDK:JDK1.7

二、创建一个Activiti项目

  57AD3D9E-9A0A-4b9e-B55A-BAE59F70A289.png8A2F51BE-1862-41e9-8816-31693C17CB0A.pngCCFAB971-A71C-4afa-A3FA-697494F6B545.png

如上:在pom 文件新增依赖的jar包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.activiti.examples</groupId>
  <artifactId>activiti-examples</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>BPMN 2.0 with Activiti - Examples</name>
 <!-- 项目属性 -->
    <properties>
        <jdk.version>1.7</jdk.version>
        <spring.version>4.1.5.RELEASE</spring.version>
        <hibernate.version>4.2.5.Final</hibernate.version>
        <spring-data-jpa.version>1.9.1.RELEASE</spring-data-jpa.version>
        <commons-dbcp.version>1.4</commons-dbcp.version>
        <jackson.version>2.0.4</jackson.version>
        <spymemcached.version>2.8.1</spymemcached.version>
        <guava.version>17.0</guava.version>
        <commons-lang3.version>3.3.2</commons-lang3.version>
        <commons-io.version>2.4</commons-io.version>
        <joda-time.version>2.1</joda-time.version>
        <slf4j.version>1.7.5</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <jetty.version>8.1.15.v20140411</jetty.version>
        <h2.version>1.4.180</h2.version>
        <junit.version>4.10</junit.version>
        <mockito.version>1.9.0</mockito.version>
        <powermock.version>1.4.12</powermock.version>
        <activiti.version>5.22.0</activiti.version>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- 依赖项定义 -->
    <dependencies>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.27</version>
</dependency>
    

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.4</version>
        </dependency>

        <!-- activiti -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-json-converter</artifactId>
            <version>${activiti.version}</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-explorer</artifactId>
            <version>${activiti.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>vaadin</artifactId>
                    <groupId>com.vaadin</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>dcharts-widget</artifactId>
                    <groupId>org.vaadin.addons</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>activiti-simple-workflow</artifactId>
                    <groupId>org.activiti</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-modeler</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-rest</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-diagram-rest</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-cxf</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>juli</artifactId>
            <version>6.0.47</version>
        </dependency>

        <!-- cxf的http支持 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-api</artifactId>
            <version>2.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>2.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>2.7.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>2.7.6</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.2.11</version>
        </dependency>

        <!-- 支持activiti缓存 -->
        <dependency>
            <groupId>org.infinispan</groupId>
            <artifactId>infinispan-core</artifactId>
            <version>5.1.7.Final</version>
        </dependency>

        <!-- UTILS -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!-- SPRING begin -->
        <!-- spring basic -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.6.9</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.9</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>3.3.1</version>
        </dependency>
        <!-- SPRING end -->

        <!-- PERSISTENCE begin -->
        <!-- hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>

        <!-- spring data access -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data-jpa.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit-dep</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- dbcp connection pool -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.0.1</version>
        </dependency>

        <!-- jdbc driver -->
        <dependency>
            <groupId>${jdbc.driver.groupId}</groupId>
            <artifactId>${jdbc.driver.artifactId}</artifactId>
            <version>${jdbc.driver.version}</version>
            <scope>runtime</scope>
        </dependency>
        <!-- PERSISTENCE end -->

        <!-- WEB begin -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- WEB end -->

        <!-- LOGGING begin -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!-- LOGGING end -->

        <!-- GENERAL UTILS begin -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.3</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jodd</groupId>
            <artifactId>jodd</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>${joda-time.version}</version>
        </dependency>

        <!-- UUID -->
        <dependency>
            <groupId>com.fasterxml.uuid</groupId>
            <artifactId>java-uuid-generator</artifactId>
            <version>3.1.3</version>
        </dependency>
        <!-- GENERAL UTILS end -->

        <!-- TEST begin -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>${mockito.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>${powermock.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito</artifactId>
            <version>${powermock.version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.mockito</groupId>
                    <artifactId>mockito-all</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2.version}</version>
        </dependency>

        <dependency>
            <groupId>org.dbunit</groupId>
            <artifactId>dbunit</artifactId>
            <version>2.4.8</version>
        </dependency>

        <!-- jetty -->
        <dependency>
            <groupId>org.eclipse.jetty.aggregate</groupId>
            <artifactId>jetty-webapp</artifactId>
            <version>${jetty.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-jsp</artifactId>
            <version>${jetty.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- TEST end -->
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <!-- compiler插件, 设定JDK版本 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>

            <!-- eclipse插件, 设定wtp版本并添加springIDE nature -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <wtpversion>2.0</wtpversion>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                </configuration>
            </plugin>

            <!-- jetty插件, 设定context path与spring profile -->
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>${jetty.version}</version>
                <configuration>
                    <webApp>
                        <contextPath>/${project.artifactId}</contextPath>
                    </webApp>
                    <stopKey>kad</stopKey>
                    <stopPort>9999</stopPort>
                </configuration>
            </plugin>

            <!-- resource插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <nonFilteredFileExtensions>
                        <!-- 过滤流程定义资源文件 -->
                        <nonFilteredFileExtension>zip</nonFilteredFileExtension>
                        <nonFilteredFileExtension>bar</nonFilteredFileExtension>
                        <nonFilteredFileExtension>png</nonFilteredFileExtension>
                        <nonFilteredFileExtension>bpmn</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>

            <!-- tomcat7 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/${project.artifactId}</path>
                    <systemProperties>
                        <JAVA_OPTS>-Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m -Dfile.encoding=UTF-8</JAVA_OPTS>
                    </systemProperties>
                </configuration>
            </plugin>
        </plugins>

        <finalName>kft-activiti-demo</finalName>
    </build>

    <profiles>
        <!-- h2 -->
        <profile>
            <id>h2</id>
            <properties>
                <db.type>h2</db.type>

                <!-- driver -->
                <jdbc.driver.groupId>com.h2database</jdbc.driver.groupId>
                <jdbc.driver.artifactId>h2</jdbc.driver.artifactId>
                <jdbc.driver.version>1.4.190</jdbc.driver.version>

                <!-- driver configs -->
                <jdbc.driver>org.h2.Driver</jdbc.driver>
                <jdbc.url>jdbc:h2:file:~/kft-activiti-demo;AUTO_SERVER=TRUE</jdbc.url>
                <jdbc.username>sa</jdbc.username>
                <jdbc.password></jdbc.password>
                <hibernate.dialect>org.hibernate.dialect.H2Dialect</hibernate.dialect>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </build>
        </profile>

        <!-- mysql -->
        <profile>
            <id>mysql</id>
            <properties>
                <db.type>mysql</db.type>

                <!-- driver -->
                <jdbc.driver.groupId>mysql</jdbc.driver.groupId>
                <jdbc.driver.artifactId>mysql-connector-java</jdbc.driver.artifactId>
                <jdbc.driver.version>5.1.11</jdbc.driver.version>

                <!-- driver configs -->
                <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
                <jdbc.url><![CDATA[jdbc:mysql://localhost:3306/kad?useUnicode=true&amp;characterEncoding=utf-8]]></jdbc.url>
                <jdbc.username>root</jdbc.username>
                <jdbc.password>root</jdbc.password>
                <hibernate.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</hibernate.dialect>
            </properties>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </build>
        </profile>
    </profiles>
</project>

 新增完POM文件之后,项目上右击--->Configure--->Convert to Maven Project,然后maven --->update即可

新增activiti.cfg.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"
		xsi:schemaLocation="http://www.springframework.org/schema/beans
				http://www.springframework.org/schema/beans/spring-beans.xsd">

	 <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!-- 配置流程引擎配置对象 -->
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/kad?useUnicode=true&amp;characterEncoding=utf-8"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="root"></property>
        <!-- 注入数据源信息 -->
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>
    
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <!-- 注入自动建表设置 -->
        <property name="processEngineConfiguration" ref="processEngineConfiguration"></property>
    </bean>
</beans>

新增log4j.properties 文件

# Output pattern : date [thread] priority category - message
log4j.rootLogger=DEBUG, Console

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[${project.artifactId}] %d %p [%t] %C.%M(%L) | %m%n

#Project defalult level
log4j.logger.me.kafeitu.demo=DEBUG

#spring default level
log4j.logger.org.springframework=INFO

#hibernate default level
log4j.logger.org.hibernate=ERROR

#apache
log4j.logger.org.apache=ERROR

log4j.logger.net.sf.ehcache=ERROR

项目结构如下图

8FB8AD44-0A11-4c8d-B1EA-6777E6C45CFE.png

   新建bpmn文件

在diagrams上右击--new-other--Activiti Diagram---hello.bpmn

F69E209D-B78D-4dab-AF7D-3518D5F3F175.png

为了使bpmn文件保存之后即可生成一个新的PNG文件,需要在windows ---preferences---Activiti---Save Actions--勾选Create Process definition image when saving the diagram 选项

64F9C148-EF40-4cb3-B350-FDF770E31346.png

画流程图(先打开Properties窗口:windows--show view--properties)

11D0A9C0-756A-446d-8396-A615CE3D8DA0.png

点击相应的节点,填写Properties 信息

7F919E31-D38D-4f4a-A886-7B1C31444FBE.png7F919E31-D38D-4f4a-A886-7B1C31444FBE.pngA8DFD80B-D49D-4900-92E2-D07AE3951A8A.png

2.1.png2.2.png3.1.png3.2.png


在流程图空白处点击

4.1.png

对bpmn 文件Ctrl+C之后即可看到bpmn文件被保存为png图片了

F62349C8-CDB8-4127-A378-5AE5FF5EB641.png

编写测试方法HelloWorld.java

package com.joydo;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Test;

public class HelloWorld {
	
	//获取流程引擎对象
	//getDefaultProcessEngine方法内部会自动读取名为activiti.cfg.xml文件的配置信息
	ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
	
	/**部署流程定义*/
	@Test
	public void deploymentProcessDefinition(){
		//与流程定义和部署对象相关的Service
		RepositoryService repositoryService=processEngine.getRepositoryService();
		
		DeploymentBuilder deploymentBuilder=repositoryService.createDeployment();//创建一个部署对象
		deploymentBuilder.name("helloWorld入门程序");//添加部署的名称
		deploymentBuilder.addClasspathResource("diagrams/hello.bpmn");//从classpath的资源加载,一次只能加载一个文件
		deploymentBuilder.addClasspathResource("diagrams/hello.png");//从classpath的资源加载,一次只能加载一个文件
		
		Deployment deployment=deploymentBuilder.deploy();//完成部署
		
		//打印我们的流程信息
		System.out.println("流程Id:"+deployment.getId());
		System.out.println("流程Name:"+deployment.getName());
	}
}

新建数据库kad,具体的数据库配置看上面的activiti.cfg.xml文件

769AC581-2E0B-43df-A7D9-619AA0A319D6.png

然后运行HelloWorldTest  项目,在项目启动之后数据库新增了26张数据表,分别是

50D462DD-8CDC-4ec3-AC33-68C089CE6C55.png

具体每张表的含义看另外一篇博客(activiti数据库表结构剖析);

运行HelloWorld.java 文件,控制台打印

F2746618-522E-481f-9CBB-B833B67C1A8D.png

当然研究控制台的日志,我们发现流程启动的时候往三张表插入了数据

1.1.png1.2.png1.3.png

至于为什么Activiti 启动的时候会自动创建26张数据表,这个我们会在下一篇博客中详细介绍

猜你喜欢

转载自blog.51cto.com/9321199/2310535