盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

flowable DmnEngine

分享牛 4652℃

关键词: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