Spring启动Activiti实现

时间:2016-08-19 21:31:10

标签: java spring spring-boot activiti

我正在尝试将activiti添加到我现有的spring启动项目中,并且无法运行一个简单的示例 - 我正在尝试从activiti BPMN调用spring bean服务。但它不断抛出异常 - 引起:org.activiti.engine.impl.javax.el.PropertyNotFoundException:无法解析标识符'testService'

我不确定还需要什么..会感激任何反馈...

这是我的BPMN

  <?xml version="1.0" encoding="UTF-8"?>

<definitions
        xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
        xmlns:activiti="http://activiti.org/bpmn"
        targetNamespace="Examples">

    <process id="enrollUser" name="Enroll User Process">
        <startEvent id="enrollStart" />
        <sequenceFlow id="flow1" sourceRef="enrollStart" targetRef="addUser" />
        <serviceTask id="addUser" name="Add user task" activiti:expression="${testService.testMethod()}" />
        <sequenceFlow id="flow2" sourceRef="addUser" targetRef="theEnd" />
        <endEvent id="theEnd" />
    </process>

</definitions>

这是我的春季服务。这是一个不同的maven项目,包含在spring web项目中作为jar。如果我把这个课程保留在同一个项目中,它似乎工作正常

public Interface TestService {

  public void testMethod();
}

@Service
public class TestServiceImpl implements TestService{

  public void testMethod(){
     System.out.println("Test method called");
  }
}

这是我的春季启动启动器

@SpringBootApplication
public class SpringBootDemoApplication {


    public static void main(String[] args) throws IOException{
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }

    @Bean
    CommandLineRunner init( final RepositoryService repositoryService,
                            final RuntimeService runtimeService,
                            final TaskService taskService) {

        return new CommandLineRunner() {

            public void run(String... strings) throws Exception {
                System.out.println("Number of process definitions : "
                        + repositoryService.createProcessDefinitionQuery().count());
                System.out.println("Number of tasks : " + taskService.createTaskQuery().count());
                runtimeService.startProcessInstanceByKey("enrollUser");
            }
        };
    }

}

这是我的POM.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.demo</groupId>
    <artifactId>demo-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>spendfit-console</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <buildEnv>minify-build</buildEnv>
        <activiti.version>5.21.0</activiti.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>${activiti.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>2.2.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

2 个答案:

答案 0 :(得分:0)

我发现了问题..似乎TestService的实现类有Impl,看起来像activiti需要确切的名称..如果我将BMPN表达式更改为activiti:expression =&#34; $ {testServiceImpl。 TestMethod的()}&#34;它工作得很好..

答案 1 :(得分:0)

使用命名bean并在表达式中按名称引用它们。 通过这种方式,您还可以轻松替换bean以进行测试 - 同名,xml spring context中的mock类按名称替换(甚至是现有的)bean:

<bean id="oms" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="com.activiti.extension.bean.OrderManagementService" />
    <constructor-arg ref="mockSettings" />
</bean>