1、配置
1.1、创建一个表单引擎
获取FormEngine的最简单方法是使用org.flowable.form.engine.FormEngines类:
FormEngine formEngine = FormEngines.getDefaultFormEngine()
我们将在 classpath上看到flowable.form.cfg.xml 文件 ,并基于文件中的配置构造一个引擎
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="formEngineConfiguration"
class="org.flowable.form.engine.impl.cfg.StandaloneFormEngineConfiguration">
<property name="jdbcUrl" value="jdbc:h2:mem:flowable;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
</beans>
FormEngineConfiguration对象也可以以编程方式使用配置文件创建。
FormEngineConfiguration.
createFormEngineConfigurationFromResourceDefault();
createFormEngineConfigurationFromResource(String resource);
createFormEngineConfigurationFromResource(String resource, String beanName);
createFormEngineConfigurationFromInputStream(InputStream inputStream);
createFormEngineConfigurationFromInputStream(InputStream inputStream, String beanName);
也可以不使用配置文件,而基于默认值创建配置 。
FormEngineConfiguration.createStandaloneFormEngineConfiguration();
FormEngineConfiguration.createStandaloneInMemFormEngineConfiguration();
所有这些都是为了FormEngineConfiguration.createXXX()方法返回一个FormEngineConfiguration,如果需要,可以进一步调整该配置。调用buildFormEngine()操作后,将创建一个FormEngine:
FormEngine formEngine =
FormEngineConfiguration.createStandaloneInMemFormEngineConfiguration()
.setDatabaseSchemaUpdate(FormEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
.setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
.buildFormEngine();
1.2、 FormEngineConfiguration bean
这个flowable.form.cfg.xml必须包含id为“formEngineConfiguration”的bean。
<bean id="formEngineConfiguration"
class="org.flowable.form.engine.impl.cfg.StandaloneFormEngineConfiguration">
然后使用这个bean构造FormEngine。
可用于定义formEngineConfiguration 的类:
- org.flowable.form.engine.impl.cfg.StandaloneFormEngineConfiguration:以独立方式使用流程引擎。Flowable将负责处理事务。默认情况下,只有在引擎启动时才会检查数据库(如果没有Flowable Form schema或schema版本不正确,则会引发异常)。
- org.flowable.form.engine.impl.cfg.StandaloneInMemFormEngineConfiguration:这是方便用于单元测试的类。Flowable Form将处理事务。默认情况下使用H2内存数据库。当引擎启动和关闭时,将创建并删除数据库。当使用这个时,可能不需要额外的配置)。
- org.flowable.form.engine.impl.cfg.StandaloneFormEngineConfiguration:在Spring环境中使用表单引擎时使用。
1.3 插入流程引擎(Plug into Process Engine)
除了在独立模式下运行之外,还可以将表单引擎插入流程引擎。这使流程引擎知晓表单引擎和其他引擎。例如,这使得既包含BPMN模型,又包含DMN模型的构件(artifacts)能够部署到流程引擎的部署服务API中。
若要使流程引擎知晓表单引擎,则需要添加org.flowable.dmn.engine.configurator.FormEngineConfigurator到流程引擎配置中的配置器列表中。此配置器是 flowable-form-engine-configurator模块的一部分。
<bean id="processEngineConfiguration" class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="configurators">
<list>
<ref bean="formEngineConfigurator" />
</list>
</property>
...
</bean>
<bean id="formEngineConfiguration" class="org.flowable.form.engine.impl.cfg.StandaloneFormEngineConfiguration">
<property name="jdbcUrl" value="jdbc:h2:mem:flowable;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
</bean>
<bean id="formEngineConfigurator" class="org.flowable.form.engine.configurator.FormEngineConfigurator">
<property name="formEngineConfiguration" ref="formEngineConfiguration" />
</bean>
1.4 数据库配置(Database configuration)
有两种方法可以配置Flowable Form引擎将使用的数据库。
第一个方法是定义数据库的JDBC属性:
- jdbcUrl:数据库的JDBC URL。
- jdbcDriver:针对特定数据库类型的驱动程序实现。
- jdbcUsername:连接到数据库的用户名。
- jdbcPassword:连接到数据库的密码。
基于所提供的JDBC属性构造出的数据源将具有默认MyBatis 连接池设置。可以选择设置以下属性来调整连接池
- jdbcMaxActiveConnections:在任何时候,连接池可以包含的最大活动连接数。默认值为10。
- jdbcMaxIdleConnections:在任何时候,连接池可以包含的最大空闲连接数。
- jdbcMaxCheckoutTime:在强制返回连接之前,可以从连接池“签出”连接的时间量(以毫秒为单位)。默认值为20000(20秒)。
- jdbcMaxWaitTime:这是一个低级别的设置,它使池有机会打印日志状态,并在需要非正常长时间的情况下重新尝试获取连接(以避免在池配置错误时永远无提示地失败)。默认值为20000(20秒)。
数据库配置示例:
<property name="jdbcUrl" value="jdbc:h2:mem:flowable_dmn;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
第二种方法,我们的基准测试表明,在处理大量并发请求时,MyBatis连接池不是最有效或最有弹性的。因此,我们建议使用javax.sql.DataSource实现,并将其注入流程引擎的配置中
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/flowable_dmn" />
<property name="username" value="flowable" />
<property name="password" value="flowable" />
<property name="defaultAutoCommit" value="false" />
</bean>
<bean id="formEngineConfiguration" class="org.flowable.form.engine.impl.cfg.StandaloneFormEngineConfiguration">
<property name="dataSource" ref="dataSource" />
...
请注意,Flowable Form不包含允许您定义此类数据源的库。所以你必须确保这些库在你的classpath上。
无论您使用的是JDBC还是数据源方法,都可以设置以下属性:
-
databaseType:通常不需要指定此属性,因为它是从数据库连接元数据自动标识的。仅在自动检测失败时指定。可能值:{h2,mysql,oracle,postgres,mssql,db2}。此设置将确定将使用哪些创建/删除脚本和查询。
-
databaseSchemaUpdate:允许您设置:在表单引擎启动和关闭(boot and shutdown)时处理数据库schema的策略。
- false(默认):在创建表单引擎时,对照库检查DB schema的版本,如果版本不匹配,则抛出异常。
- true:在构建表单引擎时,将执行检查并在必要时更新schema。如果schema不存在,则会创建它。
- create-drop:创建表单引擎时创建schema,关闭流程引擎时删除schema。
2、Flowable表单API(The Flowable Form API)
表单引擎API是与Flowable表单交互的最常用方式。中心起点是FormEngine,可以通过配置部分中描述的几种方法创建它。从FormEngine,您可以获得其他各种服务。FormEngine和services对象是线程安全的,因此可以为整个服务器保留对其中一个对象的引用。
// 将在第一次调用表单引擎时初始化并且生成表单引擎,然后始终返回相同的表单引擎
FormEngine formEngine = FormEngines.getDefaultFormEngine();
FormRuleService formRuleService = formEngine.getFormRuleService();
// FormRepositoryService服务提供用于管理和操纵部署和表单定义
FormRepositoryService formRepositoryService = formEngine.getFormRepositoryService
// FormService 提供用于创建表单实例(包含用户为特定表单定义填充的值)的方法。它还可以用于查询表单实例。
FormService formService = formEngine.getFormService();
//
FormManagementService formManagementService = formEngine.getFormManagementService();
FormEngines.init()和FormEngines.destroy()可以完成所有表单引擎的正确创建和关闭。
FormEngines类将扫描所有flowable.form.cfg.xml和flowable-form-context.xml文件。
对所有flowable.form.cfg.xml文件,表单引擎将以典型的Flowable方式构建
FormEngineConfiguration.createFormEngineConfigurationFromInputStream(inputStream).buildFormEngine()
对于所有flowable-form-context.xml,表单引擎将以Spring方式构建:首先创建Spring应用程序上下文(Spring application context),然后从该应用程序上下文获取表单引擎。
所有服务都是无状态的。这意味着您可以轻松地在集群中的多个节点上运行Flowable Form,每个节点都指向同一个数据库,而不必担心哪个机器实际执行了以前的调用。对任何服务的任何调用都是幂等的,不管它在哪里执行。
FormRepositoryService 可能是使用Flowable表单引擎时需要的第一个服务。此服务提供用于管理和操纵部署和表单定义。表单定义是表单模型的根概念。部署是Flowable表单引擎中的打包单元。一个部署可以包含多个表单定义JSON文件。执行部署意味着它被上传到引擎,在那里所有的表单定义在存储到数据库之前都会被检查和解析。从那时起,系统就知道部署了,现在可以执行部署中包含的任何表单了。 此外,此服务还允许您:
- 查询引擎已知的表单定义的部署。
- 检索表单定义的POJO版本,该版本可用于使用Java而不是JSON进行内省(introspect)。
欢迎加入我们:gitee.com/bsin-paas/a…