当您使用工作流自动化平台时,例如信号处理治理,您有时需要一个工作流来更新组织中的另一个系统。例如,每当您的公司收到客户订单时,您都希望订单履行流程更新办公室中的一个巨大的记分牌,该记分牌显示当天的订单数量。这是一个web服务集成的工作。
本文介绍如何将工作流连接到另一个应用程序的数据库。作为一个简单的例子,web服务集成将在开始记录“案例启动”事件时捕获每个案例的标识符。
此示例的源代码和文档可在https://github.com/signavio/connector-examples/tree/master/java/database-update
Web服务集成体系结构
Web服务集成是一种完全灵活的方式,可以将数据从工作流发布到组织中的其他系统。这使得工作流可以自动更新其他系统。
在此体系结构中,工作流将数据发送到充当数据库代理的连接器。拥有数据库的组织通常将连接器部署在非军事区,以避免在公众互联网上提供该数据库的风险。或者,您可以在云中同时托管数据库和连接器。
用Java编写web服务
连接器是一个简单的web服务,用于更新数据库。具体来说,它必须提供:
- 接受来自公共Internet的HTTP请求的HTTP API,例如包含将用于在数据库中插入行数据的HTTP POST请求。
- 数据库连接和执行数据库更新的方法,通常使用SQL。
Java是构建这种连接器的众多常用选择之一。有许多Java库和框架可以用来实现HTTP接口,并连接到数据库。的示例连接器(源代码)使用火花框架对于HTTP,以及JDBC使用数据库的JDBC驱动程序连接MySQL或PostgreSQL关系数据库。
在实践中,您还可以使用不同的编程语言及其相关库构建连接器,或者使用非关系数据库。这类任务的最佳选择通常是开发人员最熟悉的。
部署web服务
如果你想用数据库更新作为自己的示例连接器,您首先需要将其部署到某个地方。来部署示例连接器Heroku,按照示例中的详细说明进行操作自述,其中描述了以下步骤。
- 下载示例代码。
- 复制要部署的“database-update”更新目录。
- 初始化要部署到Heroku的git存储库。
- 通过推送git存储库将应用程序部署到Heroku。
- 在Heroku PostgreSQL数据库中创建表。
通过发送HTTP请求来发布案例启动事件,测试安装是否正常工作,使用HTTP客户端,例如HTTPie:
http post
结果应该是一个状态为“201 CREATED”的HTTP响应:
HTTP/1.1 201创建连接:close Content-Type: text/html;charset=utf-8 Date: Thu, 17 Aug 2017 09:05:40 GMT服务器:Jetty(9.4.4.v20170414) Via: 1.1 vegur
现在检查case started事件是否已添加到数据库中:
$ heroku pg:psql——>连接到postgresql-blackberry-12345 psql (9.6.4, server 9.6.1)
DATABASE -update::DATABASE=> select * from case_event;id | case_id | |创建类型 ----+---------+-------------------------+--------- 1 | 42 | 2017-08-17 09:07:08.563 |开始(1行)
现在连接器工作了,您可以从工作流向它发送数据。
从工作流中调用web服务
要在每次案例启动时向连接器发送数据,请在流程开始时配置一个脚本任务以发送HTTP请求。在脚本配置中,添加' Case '变量,这样您就可以访问Case ID。
例子的自述包含这里显示的JavaScript源代码,因此您可以复制粘贴它。
现在发布流程,启动新案例,并再次检查数据库以查看新案例事件。
DATABASE -update::DATABASE=> select * from case_event;id | case_id | |创建类型 ----+--------------------------+-------------------------+--------- 42 | 1 | 2017-08-17 09:07:08.563 | 2 | 59955开始edfd1dfff2afffe4dd6 | 2017-08-17 09:16:16.795 |开始(2行)
第二行包括来自新工作流用例的‘case_id’。要扩展示例,可以在HTTP请求和数据库表中包含更多信息,例如案例名称或触发器表单数据。
将工作流与企业IT系统集成
编写充当系统之间“连接器”的小型web服务是web服务集成的常用方法。在这种情况下,连接器将工作流的JavaScript操作与关系数据库集成在一起。您可以用任何您喜欢的功能扩展这个示例。