Flowable入门系列文章71 - JPA用法
Posted 分享牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章71 - JPA用法相关的知识,希望对你有一定的参考价值。
使用JPA变量的示例可以在Flowable源代码中的JPAVariableTest中找到。我们将JPAVariableTest.testUpdateJPAEntityValues一步一步解释。
首先,我们为我们基于的持久性单元创建一个EntityManagerFactoryMETA-INF/persistence.xml。这包含应该包含在持久性单元中的类和一些供应商特定的配置。
我们在测试中使用了一个简单的实体,它有一个id和Stringvalue属性,这个属性也是持久的。在运行测试之前,我们创建一个实体并保存。
@Entity(name = "JPA_ENTITY_FIELD")
public class FieldAccessJPAEntity
@Id
@Column(name = "ID_")
private Long id;
private String value;
public FieldAccessJPAEntity()
// Empty constructor needed for JPA
p
ublic Long getId()
return id;
p
ublic void setId(Long id)
this.id = id;
p
ublic String getValue()
return value;
p
ublic void setValue(String value)
this.value = value;
我们启动一个新的流程实例,将实体添加为一个变量。与其他变量一样,它们存储在引擎的持久性存储中。当下一次请求变量时,将从EntityManager基于类的Id 加载并存储Id。
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("entityToUpdate", entityToUpdate);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(
"UpdateJPAValuesProcess", variables);
在我们的流程定义的第一个节点包含serviceTask将调用的方法setValue上entityToUpdate,解决在启动过程实例,并会从加载时我们之前设置的JPA变量EntityManager与当前引擎的上下文相关联。
<serviceTask id='theTask' name='updateJPAEntityTask'
flowable:expression="$entityToUpdate.setValue('updatedValue')" />
当服务任务完成时,流程实例在流程定义中定义的userTask中等待,这允许我们检查流程实例。此时,EntityManager已被刷新,实体的更改已被推送到数据库。当我们得到变量的值时entityToUpdate,它会再次被加载,我们得到的value属性设置为的实体updatedValue。
// Servicetask in process 'UpdateJPAValuesProcess' should have set value on entityToUpdate.
Object updatedEntity = runtimeService.getVariable(processInstance.getId(), "entityToUpdate");
assertTrue(updatedEntity instanceof FieldAccessJPAEntity);
assertEquals("updatedValue", ((FieldAccessJPAEntity)updatedEntity).getValue());
上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:
以上是关于Flowable入门系列文章71 - JPA用法的主要内容,如果未能解决你的问题,请参考以下文章