2016-08-19 251 views
0

我想添加活動到我現有的春季啓動項目,並不能運行一個簡單的例子 - 我試圖從activiti BPMN調用spring bean服務。但它繼續拋出異常 - 引起:org.activiti.engine.impl.javax.el.PropertyNotFoundException:無法解析標識符'testService'春季啓動Activiti執行

我不知道還有什麼需要..會感謝任何反饋...

這裏是我的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項目,作爲春季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

我找到了問題..似乎作爲TestService的實現類有Impl,看起來像activiti需要確切的名字..所以,如果我改變BMPN表達式activiti:表達式=「$ {testServiceImpl.testMethod()}」它工作得很好。 。

0

使用命名bean,並在表達式中通過名稱引用它們。 這樣你也可以很容易地替換bean進行測試 - 同名,xml spring context中的模擬類用名字代替(甚至存在)bean:

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