Flowable入门系列文章15 - 整合Spring 02

Posted 分享牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章15 - 整合Spring 02相关的知识,希望对你有一定的参考价值。

1、表达式

当使用ProcessEngineFactoryBean时,默认情况下,BPMN进程中的所有表达式也将看到所有的Spring bean。可以使用可以配置的映射来限制要在表达式中显示的bean(甚至没有)。下面的例子公开了一个单一的bean(打印机),可以在“打印机”键下使用。 为了让所有的bean都不暴露,只需在SpringProcessEngineConfiguration上传递一个空的列表作为beans属性。当没有设置bean属性时,上下文中的所有Spring bean都将可用。

<bean id="processEngineConfiguration" class="org.flowable.spring.SpringProcessEngineConfiguration">
...
<property name="beans">
<map>
<entry key="printer" value-ref="printer" />
</map>
</property>
</bean>
<bean id="printer" class="org.flowable.examples.spring.Printer" />

现在,可以在表达式中使用暴露的bean:例如,SpringTransactionIntegrationTest hello.bpmn20.xml显示了如何使用UEL方法表达式来调用
Spring bean上的方法:

<definitions id="definitions">
<process id="helloProcess">
<startEvent id="start" />
<sequenceFlow id="flow1" sourceRef="start" targetRef="print" />
<serviceTask id="print" flowable:expression="#{printer.printMessage()}" />
<sequenceFlow id="flow2" sourceRef="print" targetRef="end" />
<endEvent id="end" />
</process>
</definitions>

哪里Printer是这样的:

public class Printer {
	public void printMessage() {
		System.out.println("hello world");
	}
}

而且Spring bean配置(如上所示)看起来像这样:

<beans>
	...
	<bean id="printer" class="org.flowable.examples.spring.Printer" />
</beans>

2、自动资源部署

Spring集成还具有用于部署资源的特殊功能。在流程引擎配置中,您可以指定一组资源。在创建流程引擎时,所有这些资源都将被扫描和部署。有适当的过滤,防止重复部署。只有当资源实际发生变化时,才会将新部署部署到Flowable DB。这在Spring容器经常重启的很多用例中都是有意义的(例如测试)。

示例:

<bean id="processEngineConfiguration" class="org.flowable.spring.SpringProcessEngineConfiguration">
...
<property name="deploymentResources"
value="classpath*:/org/flowable/spring/test/autodeployment/autodeploy.*.bpmn20.xml" />
</bean>
<bean id="processEngine" class="org.flowable.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>

默认情况下,上面的配置会将与过滤器匹配的所有资源归入到Flowable引擎的单个部署中。重复过滤防止重新部署不变的资源适用于整个部署。在某些情况下,这可能不是你想要的。例如,如果以这种方式部署一组流程资源,并且这些资源中只有一个流程定义发生了变化,则整个部署将被视为新的,并且该部署中的所有流程定义将被重新部署,从而导致在每个流程定义的新版本中,即使只有一个实际上被改变了。

为了能够自定义部署确定的方式,你可以指定一个附加属性SpringProcessEngineConfiguration,deploymentMode。该属性定义了部署将从匹配过滤器的一组资源中确定的方式。这个属性默认支持3个值:

  • default:将所有资源分组到一个部署中,并对该部署应用重复过滤。这是默认值,如果不指定值,将会使用它。
  • single-resource:为每个单独的资源创建一个单独的部署,并对该部署应用重复过滤。这是您将使用的值将每个流程定义分开部署,并且只有在流程定义版本已更改时才创建新流程定义版本。
  • resource-parent-folder:为共享相同父文件夹的资源创建单独的部署,并对该部署应用重复筛选。可以使用此值为大多数资源创建单独的部署,但仍可以通过将其放置在共享文件夹中对其进行分组。以下是如何指定single-resource配置的示例deploymentMode:
<bean id="processEngineConfiguration"
class="org.flowable.spring.SpringProcessEngineConfiguration">
...
<property name="deploymentResources" value="classpath*:/flowable/*.bpmn" />
<property name="deploymentMode" value="single-resource" />
</bean>

除了使用上面列出的值外deploymentMode,您可能还需要自定义的行为来确定部署。如果是这样,你可以创建一个子类SpringProcessEngineConfiguration并覆盖该getAutoDeploymentStrategy(String deploymentMode)方法。此方法确定哪个部署策略用于deploymentMode配置的某个值。

3、单元测试

与Spring集成时,可以使用标准的Flowable测试工具轻松测试业务流程。以下示例显示了如何在典型的基于Spring的单元测试中测试业务流程:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:org/flowable/spring/test/junit4/springTypicalUsageTest-context.xml")
public class MyBusinessProcessTest {
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
@Rule
public FlowableRule flowableSpringRule;
@Test
@Deployment
public void simpleProcessTest() {
runtimeService.startProcessInstanceByKey("simpleProcess");
Task task = taskService.createTaskQuery().singleResult();
assertEquals("My Task", task.getName());
taskService.complete(task.getId());
assertEquals(0, runtimeService.createProcessInstanceQuery().count());
}
}

请注意,为了这个工作,你需要在Spring配置中定义一个org.flowable.engine.test.Flowable bean(在上面的例子中,它是通过自动连线注入的)。

<bean id="flowableRule" class="org.flowable.engine.test.Flowable">
<property name="processEngine" ref="processEngine" />
</bean>

4、JPA与Hibernate 4.2.x

在Flowable引擎中使用服务任务或侦听器逻辑中的Hibernate 4.2.x JPA时,需要额外依赖于Spring ORM。对于Hibernate 4.1.x或更早版本来说这不是必需的。应该添加以下依赖项:

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

上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:

以上是关于Flowable入门系列文章15 - 整合Spring 02的主要内容,如果未能解决你的问题,请参考以下文章

Flowable入门系列文章17 - 整合Spring 04

Flowable入门系列文章16 - 整合Spring 03

Flowable入门系列文章23 - 基本的Flowable概念四

Flowable入门系列文章18 - 部署Flowable

Flowable入门系列文章20 - 基本的Flowable概念一

Flowable入门系列文章80 - Flowable Designer部署功能