关键词:flowable DmnEngine,DmnManagementService,DmnRuleService,DmnEngineConfiguration,act_dmn_deployment,act_dmn_databasechangelog,act_dmn_databasechangeloglock,act_dmn_deployment_resource
本文重点讲解flowable中的DmnEngine(动态引擎)。包括动态引擎配置类的定义、使用动态引擎配置类创建DmnEngine引擎的过程、部署流程、修改流程中的部分属性。
本教程主要分以下几点内容:
一、 动态引擎配置类的定义
二、 动态引擎类的创建
三、 动态引擎的接口定义
四、 流程的部署
五、 流程信息的修改。
六、 缺陷
1.1 动态引擎配置类的定义
对于动态引擎的定义,首先定义一个文件名称为flowable.cfg.xml,该文件的内容如下:
<bean id="dmnEngineConfiguration" class="org.flowable.dmn.engine.impl.cfg.StandaloneDmnEngineConfiguration">
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/flowable6" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="" />
</bean>
上述代码中,默认的bean的id值必须是dmnEngineConfiguration。当然可以通过其他的方式使用,后续源码分析章节详细讲述。
1.2 动态引擎类的创建
上文的文件定义完毕之后,接下来定义一个类并通过StandaloneDmnEngineConfiguration实例对象创建DmnEngine实例对象。代码如下所示:
@Before
public void init() {
InputStream in = App.class.getClassLoader().getResourceAsStream(
"com/shareniu/flowablestudy/ch3/flowable.cfg.xml");
DmnEngineConfiguration dmnEngineConfiguration = DmnEngineConfiguration.createDmnEngineConfigurationFromInputStream(in);
dmnEngine = dmnEngineConfiguration.buildDmnEngine();
repositoryService=dmnEngine.getDmnRepositoryService();
}
上述代码中调用DmnEngineConfiguration类中的createDmnEngineConfigurationFromInputStream方法创建DmnEngineConfiguration 实例对象,然后根据该实例对象创建dmnEngine。其中createDmnEngineConfigurationFromInputStream方法的源码如下:
public static DmnEngineConfiguration createDmnEngineConfigurationFromInputStream(InputStream inputStream) {
return createDmnEngineConfigurationFromInputStream(inputStream, "dmnEngineConfiguration");
}
没错,默认情况下bean的id值必须是dmnEngineConfiguration。这一点与上文所述相吻合。
1.3 动态引擎的接口定义
DmnEngine接口的定义如下:
public interface DmnEngine {
public static String VERSION = "6.0.0.0"; //
String getName();
void close();
DmnManagementService getDmnManagementService();
DmnRepositoryService getDmnRepositoryService();
DmnRuleService getDmnRuleService();
DmnEngineConfiguration getDmnEngineConfiguration();
}
VERSION:动态引擎的版本值,目前是6.0.0.0。通过该版本的定义可知flowable中的动态引擎还有很长的路去优化和升级。
getName():动态引擎的名称,默认为default。
close:动态引擎的关闭。
DmnManagementService:该类主要用于获取一系列的数据表元数据信息。
DmnRepositoryService:动态部署流程资源。
DmnRuleService:按照规则启动流程实例。
DmnEngineConfiguration:动态引擎配置类。
1.4 流程的部署
首先,我们任意定义一个流程,并调用如下的代码进行部署。 @Test
public void addClasspathResource() {
InputStream inputStream = App.class.getClassLoader()
.getResourceAsStream("com/shareniu/flowablestudy/ch3/one.bpmn");
DmnRepositoryService dmnRepositoryService = dmnEngine.getDmnRepositoryService();
dmnRepositoryService.createDeployment().name("shareniu.bpmn") .addClasspathResource("com/shareniu/flowablestudy/ch3/oneDecisionTaskProcess.bpmn20.xml")
.deploy();
}
上述代码执行完毕之后,act_dmn_deployment表的数据如下图所示:
注意:使用动态引擎部署操作涉及到的表有:act_dmn_deployment、act_dmn_databasechangelog、act_dmn_databasechangeloglock、act_dmn_deployment_resource。
1.5 流程信息的修改
上文中,部署流程资源的时候并没有指定分类CATEGORY_、TENANT_ID_。接下来我们修改这两个值,代码如下:
@Test
public void idmIdentityService() {
DmnRepositoryService dmnRepositoryService = dmnEngine.getDmnRepositoryService();
String category="shareniu1";
String deploymentId="353a2cf9-f7f2-11e6-b173-30b49e08e9bc";
dmnRepositoryService.setDeploymentCategory(deploymentId, category);
dmnRepositoryService.setDeploymentTenantId(deploymentId, "shareniu");
}
执行上述代码,act_dmn_deployment表的数据如下图所示:
经过该株洲之后,CATEGORY_、TENANT_ID_已经被成功修改了。
1.6 缺陷
对于bpm格式的规则流程,目前在mysql中没有测试成功,文件无法解析。因此该功能无法正式开始运用。BUg以及提交给官网了。
转载请注明:分享牛 » flowable DmnEngine