工具
JMX
简介
可以使用标准的 Java Management Extensions(JMX)技术连接到 Flowable 引擎,以获取信息或改变其行为。任何标准的 JMX 客户端都可以用于此目的。启用和停用 Job Executor、部署新的流程定义文件以及删除它们,都只是使用 JMX 无需编写一行代码即可完成的示例。
快速开始
默认情况下 JMX 并未启用。要以默认配置启用 JMX,只需通过 Maven 或其他任何方式将 flowable-jmx jar 文件添加到你的 classpath 即可。如果你使用 Maven,可以在 pom.xml 中添加以下行来加入相应的依赖:
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-jmx</artifactId>
<version>latest.version</version>
</dependency>
添加依赖并构建流程引擎之后,JMX 连接就可以使用了。只需运行标准 JDK 发行版中自带的 jconsole。在本地进程列表中,你将看到包含 Flowable 的 JVM。如果由于某种原因该 JVM 没有出现在"local processes"(本地进程)部分,可以尝试在"Remote Process"(远程进程)部分使用以下 URL 连接它:
service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/flowable
你可以在日志文件中找到确切的本地 URL。连接之后,你可以看到标准的 JVM 统计信息和 MBean。通过选择 MBeans 选项卡并在右侧面板中选择"org.flowable.jmx.Mbeans",可以查看 Flowable 特有的 MBean。选择任意 MBean,即可查询信息或更改配置。下面的截图展示了 jconsole 的外观:
可以使用任何 JMX 客户端(不限于 jconsole)来访问 MBean。大多数数据中心监控工具都有一些连接器,使其能够连接到 JMX MBean。
属性与操作
以下是目前可用的属性和操作列表。此列 表可能会在未来的版本中根据需要扩充。
| MBean | 类型 | 名称 | 描述 |
|---|---|---|---|
| ProcessDefinitionsMBean | 属性 | processDefinitions | 已部署流程定义的 Id、Name、Version、IsSuspended 属性,以字符串列表的列表形式呈现 |
| 属性 | deployments | 当前部署的 Id、Name、TenantId 属性 | |
| 方法 | getProcessDefinitionById(String id) | 具有给定 id 的流程定义的 Id、Name、Version 和 IsSuspended 属性 | |
| 方法 | deleteDeployment(String id) | 删除具有给定 Id 的部署 | |
| 方法 | suspendProcessDefinitionById(String id) | 挂起具有给定 Id 的流程定义 | |
| 方法 | activatedProcessDefinitionById(String id) | 激活具有给定 Id 的流程定义 | |
| 方法 | suspendProcessDefinitionByKey(String id) | 挂起具有给定 key 的流程定义 | |
| 方法 | activatedProcessDefinitionByKey(String id) | 激活具有给定 key 的流程定义 | |
| 方法 | deployProcessDefinition(String resourceName, String processDefinitionFile) | 部署流程定义文件 | |
| JobExecutorMBean | 属性 | isJobExecutorActivated | 如果异步作业执行器已激活则返回 true,否则返回 false |
| 方法 | setJobExecutorActivate(Boolean active) | 根据给定的布尔值激活或停用异步作业执行器 |
配置
JMX 使用默认配置,以便能够以最常用的配置轻松部署。不过,更改默认配置也很容易。你可以通过编程方式或配置文件来完成。以下代码片段展示了如何在配置文件中实现:
<bean id="processEngineConfiguration" class="...SomeProcessEngineConfigurationClass">
...
<property name="configurators">
<list>
<bean class="org.flowable.management.jmx.JMXConfigurator">
<property name="connectorPort" value="1912" />
<property name="serviceUrlPath" value="/jmxrmi/flowable" />
...
</bean>
</list>
</property>
</bean>
下表展示了可以配置的参数及其默认值:
| 名称 | 默认值 | 描述 |
|---|---|---|
| disabled | false | 如果设置了该参数,即使存在依赖也不会启动 JMX |
| domain | org.flowable.jmx.Mbeans | MBean 的域名 |
| createConnector | true | 如果为 true,则为已启动的 MbeanServer 创建一个连接器 |
| MBeanDomain | DefaultDomain | MBean 服务器的域名 |
| registryPort | 1099 | 作为注册端口出现在服务 URL 中 |
| serviceUrlPath | /jmxrmi/flowable | 出现在服务 URL 中 |
| connectorPort | -1 | 如果大于零,将作为连接器端口出现在服务 URL 中 |
JMX 服务 URL
JMX 服务 URL 的格式如下:
service:jmx:rmi://<hostName>:<connectorPort>/jndi/rmi://<hostName>:<registryPort>/<serviceUrlPath>
hostName 会自动设置为机器的网络名称。
connectorPort、registryPort 和 serviceUrlPath 都可以配置。
如果 connectionPort 小于零,服务 URL 中的相应部分将被去掉,URL 将简化为:
service:jmx:rmi:///jndi/rmi://:<hostname>:<registryPort>/<serviceUrlPath>
Maven 原型
创建测试用例
在开发过程中,有时先创建一个小的测试用例来验证某个想法或特性,
然后再在真实应用程序中实现,会很有帮助。
这有助于隔离被测对象。JUnit 测试用例也是沟通 bug 报告和特性请求时首选的工具。
在 jira issue 中附上 bug 报告或特性请求的测试用例,可以显著减少修复时间。
为便于创建测试用例,我们提供了一个 maven 原型(archetype)。使用该原型可以快速创建标准测试用例。
该原型应该已经存在于标准仓库中。如果没有,你只需在 tooling/archtypes 文件夹中键入 mvn install,
即可轻松将其安装到本地 maven 仓库文件夹中。
以下命令用于创建单元测试项目:
mvn archetype:generate \
-DarchetypeGroupId=org.flowable \
-DarchetypeArtifactId=flowable-archetype-unittest \
-DarchetypeVersion=<current version> \
-DgroupId=org.myGroup \
-DartifactId=myArtifact
各参数的含义在下表中说明:
单元测试生成原型参数
| 行 | 参数 | 说明 |
|---|---|---|
| 1 | archetypeGroupId | 原型的组 id。应为 org.flowable |
| 2 | archetypeArtifactId | 原型的制品 id。应为 flowable-archetype-unittest |
| 3 | archetypeVersion | 生成的测试项目中使用的 Flowable 版本 |
| 4 | groupId | 生成的测试项目的组 id |
| 5 | artifactId | 生成的测试项目的制品 id |
生成的项目目录结构如下所示:
.
├── pom.xml
└── src
└── test
├── java
│ └── org
│ └── myGroup
│ └── MyUnitTest.java
└── resources
├── flowable.cfg.xml
├── log4j.properties
└── org
└── myGroup
└── my-process.bpmn20.xml
你可以修改 Java 单元测试用例及其对应的流程模型,或者添加新的测试用例和流程模型。
如果你使用该项目来阐述某个 bug 或某项特性,测试用例最初应该是失败的。在期望的 bug 被修复或期望的特性被实现之后,它应该变为通过。
在发送之前,请务必键入 mvn clean 清理项目。