扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
本文将开发一个客户订单示例应用程序,它使用 IBM® WebSphere® Integration Developer、WebSphere Process Server、DB2® 和 WebSphere Adapter for JDBC,以利用数据库事件来调用业务流程。了解数据库驱动的业务流程如何能够帮助您加快上市时间和降低总体拥有成本。
先决条件
为了开发这个循序渐进的示例应用程序,应考虑下列先决条件:
|
WebSphere JCA 1.5 适配器
Java™ Component Architecture (JCA) 是 Java Enterprise Edition (Java EE) 规范的一部分,用于提供一种标准方法来与非 Java EE 系统进行事务通信,如图 1 所示。WebSphere 系列提供了一组适配器来连接到各种企业信息系统 (Enterprise Information Systems, EIS),如 SAP 和 Peoplesoft。
图 1. 将 EIS 与 JCA 适配器集成
本文将利用 WebSphere Adapter for Java Database Connectivity (JDBC),它能与任何具有兼容 JDBC 驱动程序的数据库集成。当数据库表中发生创建、更新或删除事件时,我们将使用该适配器的“入站接口”来调用业务流程。有关 Java Connector Architecture 和 WebSphere 适配器组合的更多信息,请参见参考资料。
数据库驱动的业务流程的业务案例
您的组织的后端基础设施可能很适合对业务流程进行数据库驱动的调用,但是该体系结构设计决策并不是完美无瑕的。请从业务角度考虑下列因素:
总之,对于遗留集成、事务服务质量和以数据库或大型机为中心的技能集而言,数据库驱动的业务流程是强有力的体系结构设计决策。当存在严格的性能要求或存在开销很大的网络延迟时,数据库驱动的业务流程可能不是最佳的解决方案。
客户订单示例
本部分将详细描述该客户订单示例应用程序的配置和开发。该示例应用程序由接受客户订单的业务流程组成。请考虑下列数据库实体:
图 2. 订单应用程序数据库实体
在对 ORDER
表创建、更新或删除一个行时,将会通过对应的数据库触发器向 ORDER_EVENT
表添加一个行。JCA Adapter for JDBC 利用 ORDER_EVENT
表来调用下游业务流程,如图 3 所示。该适配器是通过轮询 ORDER_EVENT
表中的新行(以您可以指定的间隔)来实现这点的。
图 3. 订单应用程序概述
上图是与供应商无关的通用图解。对于我们的示例应用程序,左侧的数据库为 DB2,Java EE 运行时为 WebSphere Process Server,业务流程为使用 WebSphere Integration Developer 来开发的基于业务流程执行语言(Business Process Execution Language,BPEL)标准的服务组件体系结构 (SCA) 业务流程组件。
创建 DB2 表和触发器
下面的说明逐步地为该客户订单示例完成新的 DB2 数据库以及必要的表和触发器的创建。
[rain%] su db2admin [rain%] password: ******** [rain%] /opt/IBM/db2/V8.2/bin/db2cc |
ORDERS
数据库以后,通过选择“c:>”图标来打开命令编辑器。CREATE SCHEMA db2admin AUTHORIZATION <your-admin-username-here> |
CREATE TABLE ORDER ( ORDER_ID INTEGER NOT NULL PRIMARY KEY, DESC VARCHAR(255), QTY INTEGER, ); |
重要:如果您希望监视的是现有表而不是 ORDER
表,则可以使用同一个事件表。如果要使用不同的模式名称,您需要更改所有三个触发器,以插入不同的 OBJECT_NAME
。所插入的文本必须与适配器使用的业务图名称准确匹配(请参见创建业务流程的步骤 2)。该文本的格式为 <schema-name><table-name>BG
。例如,如果您的模式名称为 AS2,要监视的表名为 PROCUREMENT
,则将所有 Db2adminOrderBG
引用更改为 As2ProcurementBG
。
CREATE TABLE ORDER_EVENT ( EVENT_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE ) PRIMARY KEY, OBJECT_KEY INTEGER NOT NULL, OBJECT_NAME VARCHAR(40) NOT NULL, OBJECT_FUNCTION VARCHAR(40) NOT NULL, EVENT_PRIORITY INT NOT NULL, EVENT_TIME TIMESTAMP DEFAULT CURRENT TIMESTAMP NOT NULL, EVENT_STATUS INT NOT NULL, EVENT_COMMENT VARCHAR(100) ); CREATE TRIGGER event_create AFTER INSERT ON ORDER REFERENCING NEW AS N FOR EACH ROW MODE DB2SQLINSERT INTO ORDER_EVENT (object_key, object_name, object_function, event_priority, event_status) VALUES (N.ORDER_ID, 'Db2adminOrderBG', 'Create', 1, 0); CREATE TRIGGER event_update AFTER UPDATE ON ORDER REFERENCING NEW AS N FOR EACH ROW MODE DB2SQLINSERT INTO ORDER_EVENT (object_key, object_name, object_function, event_priority, event_status) VALUES (N.ORDER_ID, 'Db2adminOrderBG', 'Update', 1, 0); CREATE TRIGGER event_delete AFTER DELETE ON ORDER REFERENCING OLD AS O FOR EACH ROW MODE DB2SQLINSERT INTO ORDER_EVENT (object_key, object_name, object_function, event_priority, event_status) VALUES (O.ORDER_ID, 'Db2adminOrderBG', 'Delete', 1, 0); |
/home/db2inst1/sqllib/java/db2jcc.jar
/home/db2inst1/sqllib/java/db2jcc_license_cu.jar
C:\Program Files\IBM\SQLLIB\java\db2jcc.jar
C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cu.jar
/opt/ibm/WebSphere/ID/runtimes/bi_v6/lib
C:\Program Files\IBM\WebSphere\ID\runtimes\bi_v6\lib
导入和配置适配器
本部分将逐步地将 WebSphere Adapter for JDBC 导入您的 WebSphere Integration Developer 工作区并对其进行配置。
<your-adapter-install-directory>/adapter/jdbc/deploy
|
Username: db2admin Password: <your-db2-password> EventOrderBy: EVENT_ID EventTableName: ORDER_EVENT DatabaseVendor: DB2 |
创建业务流程
您的工作区现在看起来应该类似于图 16。当某个数据库事件发生时,将会调用 JDBCInboundInterface 组件。在本部分中,我们将构建在 JDBCInboundInterface 被调用时接收通知的组件。也就是三个调用来进行创建、更新和删除操作的业务流程。这里假设您熟悉服务组件体系结构 (SCA) 和 WebSphere 业务流程。有关使用 WebSphere Integration Developer 来开发业务流程的信息,请参见参考资料部分提供的信息中心。
图 16. 业务集成模块
System.out.println( "============ New Order Process Invoked ============"); System.out.println( "ORDER_ID is "+Row.getDataObject("Db2adminOrder").getInt("orderid")); System.out.println( "DESC is "+Row.getDataObject("Db2adminOrder").getString("desc")); System.out.println( "QTY is "+Row.getDataObject("Db2adminOrder").getInt("qty")); System.out.println( "==================================================="); |
return Row.getDataObject("Db2adminOrder").getInt("qty") > 10; |
System.out.println("++++++++ Discount Applied! ++++++++"); |
System.out.println( "============ Update Order Process Invoked ============"); System.out.println( "ORDER_ID is "+Row.getDataObject("Db2adminOrder").getInt("orderid")); System.out.println( "DESC is "+Row.getDataObject("Db2adminOrder").getString("desc")); System.out.println( "QTY is "+Row.getDataObject("Db2adminOrder").getInt("qty")); System.out.println( "======================================================"); |
return 0 == Row.getDataObject("Db2adminOrder").getInt("qty"); |
System.out.println("++++++ QTY is 0. Removing Order. ++++++"); |
System.out.println( "============ Delete Order Process Invoked ============"); System.out.println( "ORDER_ID is "+Row.getDataObject("Db2adminOrder").getInt("orderid")); System.out.println( "DESC is "+Row.getDataObject("Db2adminOrder").getString("desc")); System.out.println( "QTY is "+Row.getDataObject("Db2adminOrder").getInt("qty")); System.out.println( "======================================================"); |
String premiumCode = "222"; String orderId = Integer.toString(Row.getDataObject("Db2adminOrder").getInt("orderid")); if(3 > orderId.length()) return false; else return orderId.substring(0,3).equals(premiumCode); |
System.out.println( "+++++ Premium customer order deleted. Feedback survey send. +++++"); |
该示例应用程序的开发到此就完成了!您的最终组装关系图看起来应该类似图 22。
|
图 22. 最终组装关系图
测试应用程序
本部分使用 Test Component Wizard 来测试该业务流程,并最终通过在 DB2 中填充 ORDER
表来测试整个应用程序。
结束语
本文介绍了使用 WebSphere 和 DB2 组合的数据库驱动的业务流程,但愿您会发现它是及时和有用的。我们介绍了数据库驱动的业务流程是什么、为什么以及何时应该使用它们,并提供了一个详细的逐步示例,展示如何使用 WebSphere Process Server 平台来实现此类业务流程。现在您已经完成了配置和开发该客户订单示例应用程序的步骤,您可以使用本文提供的信息,通过开发自己的数据库驱动的业务流程来最大化组织的效率。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者