我正在尝试将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>
答案 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>