扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
在本系列文章中的第一篇文章“与 WebSphere Integration Developer 适配器连接 – 介绍与适配器连接”中,您学习了有关将每种类型的适配器与 WebSphere Integration Developer 结合使用的基础知识(包括入站处理和出站处理之间的差异),以及资源适配器如何适应 WebSphere Integration Developer 应用程序。本文向您介绍 Java Database Connectivity (JDBC™) 资源适配器。我们先概述 JDBC 资源适配器,然后指导您完成构建同时使用 JDBC 适配器的入站和出站功能的应用程序所必需的步骤。
JDBC 提供了使用 Java 编程语言连接任何数据库的标准方法。如果没有 JDBC,您需要编写特定于每个具体数据库的自定义代码。为提供统一的编程数据库访问,数据库供应商为其数据库提供了 JDBC 驱动程序。这为 Java 开发人员带来了便利,但是作为 WebSphere 集成开发人员,不需要考虑 Java 数据库编程。您真正需要的是让数据库充当服务提供程序和/或使用者,并使用导入和导出将其集成到您的应用程序中。
JDBC 资源适配器利用 JDBC 提供的标准数据库访问,隐藏了这些详细信息,并允许您以与任何其他企业信息系统 (EIS) 相同的方式使用数据库。作为集成开发人员,您只需要处理导入或导出即可。正如在以前文章中了解到的,企业发现向导会指导您完成 JDBC 资源适配器必需的配置。
在开始学习 JDBC 适配器之前,让我们先快速了解一下其详情。
|
JDBC 适配器概述
WebSphere Adapter for JDBC 提供应用程序和数据库之间的双向连接。数据库示例有 IBM DB2®、IBM Informix®、Oracle 和 Microsoft™ SQLServer。JDBC 适配器可让您将应用程序与具有支持 JDBC 2.0 或更高版本的 JDBC 驱动程序的任何数据库集成。
图 1 说明了 JDBC 资源适配器、数据库组件和 WebSphere Process Server 组件的典型设置。
EISExport 和 EISImport 是使用 Enterprise Service Discovery 向导实现的。从以前的文章中知道,导出允许服务调用到模块,导入允许模块调用其他服务。该向导使用 JDBC 资源适配器确定哪些操作可用作数据库的一部分。这些操作都属于数据库中的每个表。该向导还创建承载每个表的行数据的业务对象。因此,如果 Customer 数据库中的表包含诸如 CustKey、FName 和 LName 的列,那么业务对象将包含属性 CustKey、FName 和 LName。该向导会发现属于入站服务(导出)和出站服务(导入)的操作。下面我们将介绍,对数据库的操作包括创建、更新和删除。通过这些端点,您还可以与不同的企业信息系统交换应用程序信息。图 2 显示了模块中定义的 EIS 导出和 EIS 导入组件。
出站处理
从本系列文章的以前文章中您了解到,出站处理 指模块何时进行请求,以便使用导入将消息发送到 EIS,或从 EIS 检索消息。出站处理的示例有,当应用程序作为信用检查的一部分从数据库查找客户信息时,或者当应用程序收到需要在数据库中存储的新信息时进行的操作。
由于您的模块在使用导入,所以它可以像访问其他任何服务一样访问 EIS。JDBC 资源适配器处理从导入到 EIS 的请求,本示例中为数据库。
当您的模块需要在数据库中访问或存储信息时,在图 1 中,需要关注的主要部分是应用程序表。应用程序表 包含应用程序将使用或修改的企业信息。通常,使用该表的应用程序将操作、更新或同步其中包含的信息。因此,对于出站处理,在配置 JDBC 适配器时,可以指定需要从模块访问哪些表。
当从数据库发送或检索数据时,JDBC 适配器的出站处理支持以下两种业务对象样式:后像 (after-image) 和增量 (delta)。后像 业务对象是进行所有更改之后的完整业务对象。例如,在应用程序中处理业务对象时,可能要经历若干次更改。我们将要在数据库中存储的最终版本称为后像。使用后像业务对象样式的操作有创建、更新和删除。
另一方面,增量 是在 ApplyChanges 操作中使用的业务对象,它只包含键值以及给定键的更改值。增量的示例有,在应用程序更改客户地址时进行的操作。业务对象中存在的所有内容都是客户 ID(如果是键)和新的地址。有关业务对象样式的详细信息,请参阅参考资料部分中的 Technical overview of the Adapter for JDBC。
入站处理
入站处理 是指模块使用导出从 EIS 接收信息时进行的操作。当对 EIS 进行更新时,会发生这种情况。JDBC 资源适配器将 EIS 中更改的信息(本示例中为数据库的创建、更改或删除)转发到模块中的导出。该模块然后可以基于更改的信息执行它提供的服务。
您可能还记得上一篇文章中的内容,平面文件资源适配器通过轮询事件目录来确定何时添加新的文件,然后将内容转发到模块。使用 JDBC 资源适配器,获取对模块进行数据库更改的技巧是使用触发器。接下来让我们看看如何进行此工作。
数据库触发器 是驻留在数据库中的程序,当数据库中的表发生更新之类的事件时会运行该触发器。此触发器允许将数据库中的更改发送到 WebSphere Integration Developer 模块中的导出。图 3 显示了示例 IBM DB2 数据库触发器。
用形象的说法是,图 3 中的数据库触发器表明:“当 CUSTOMER 数据库表中创建新行时,将值插入事件存储表”。插入的值包括新行的主键和将要使用行数据填充的业务对象的名称。若要处理所有数据库表事件,则需要为与模块相关的每个表定义三个触发器,即 CREATE、UPDATE 和 DELETE。
事件表 存储数据库触发器在分段表中生成的异步事件。无需在与数据库触发器和应用程序数据库表相同的数据库中定义事件表;但是必须对其进行定义,并将其部署为符合 XA(两阶段提交)的数据库的一部分。在事件提交给导出之前,由表存储这些事件。在包含导出的模块使用事件时,事件表会删除该事件。有关事件表定义的详细信息,请参阅参考资料部分中 Technical overview of the Adapter for JDBC 的 Inbound processing 部分。
对于入站处理,当应用程序表中出现数据操作(创建、更新或删除)时,数据库触发器会捕捉更改,并在事件表中插入行。JDBC 资源适配器通过轮询事件数据库连续监视事件表,以检测事件表中何时有新行出现。当出现新行时,JDBC 资源适配器将行中的数据转换为业务图,并调用 WebSphere Integration Developer 模块中 EIS 导出上的接口操作。这与使用任何其他资源适配器执行的操作一样,您可以通过 Enterprise Service Discovery 向导创建业务图和接口。
|
数据库同步场景
让我们通过构建一个使用 JDBC 适配器的应用程序来实践一下刚才学到的概念。数据库同步场景是一个很好的示例,其中您可以放置要使用的 JDBC 适配器的入站和出站功能。通常情况下,在一个数据库表中修改数据要求与不同位置的其他类型的数据库保持数据同步。例如,某一公司可能具有镜像另一个数据库的数据库,并且两个数据库需要保持同步,或者已合并的两个公司可能需要同步在两个不同类型的数据库中保持的信息。
为模拟实际数据库同步场景,您需要创建要保持同步的两个数据库——ABCFIN 和 ABCINS。该表表示名为 ABC 的假想公司的财务和保险表。每个数据库将包含表 1 中的值:
名称 | 类型 | 说明 |
---|---|---|
Pkey |
VARCHAR(10) |
主键 |
Fname |
VARCHAR(20) |
客户的名字 |
Lname |
VARCHAR(20) |
客户的姓氏 |
Ccode |
VARCHAR(10) |
客户代码 |
您还可以使用接口映射组件开发数据同步逻辑,并使用企业发现向导创建 EIS 导出和 EIS 导入。您需要为 JDBC 适配器入站处理定义数据库触发器。图 4 概述了数据库同步场景。
完成场景的开发后,您需要在服务器上运行应用程序,以同步两个数据库之间的数据。
|
构建场景
以下各部分将描述构建数据库同步场景的步骤:
设置数据库
|
在开始构建应用程序之前,您需要设置应用程序要使用的数据库和表。在下载部分中,jdbcscripts.zip
文件包含用于 ABCFIN 数据库的数据库创建脚本。此数据库包括应用程序将要同步的客户表和 JDBC 资源适配器将轮询以创建入站事件的事件表。
db2 =>
提示符下输入 quit
。这将退出 DB2 命令行处理器模式,以便可以更改目录。
db2 –tf jdbc_source_script_db2.sqldb2 –tf jdbc_target_script_db2.sql |
|
图 5 显示了第一个命令的执行情况。对于每个脚本,将提示您输入 db2admin 密码,脚本执行完成后,您将看到一条 SQL 命令已完成的消息。
图 6 显示了运行数据库创建脚本后的事件存储表。通过选择 Start - Program Files - IBM DB2 - General Administration Tools - Control Center,然后选择 Control Center - All Databases - ABCFIN - Tables 您可以看到该表。
WebSphere Adapter for JDBC 用户指南(请参见参考资料部分)说明了事件存储表中的字段,现在让我们简单地了解一下如何使用此表。当其中一个数据库触发器运行时,将填充事件存储表。如果回过头来参考一下图 3,可以了解到触发器使用客户表的 pkey
(主键)值设置了 object_key
值。JDBC 适配器使用 object_key
作为对客户表的索引,以检索更改的行。然后将该行中包含的数据作为业务图发送到模块中的导出。
您已完成数据库的设置,并准备好从数据库发现服务。
导入 JDBC 资源适配器
在运行 Enterprise Service Discovery 向导之前,您需要将 JDBC 资源适配器导入到工作区。
<WIDInstallDIR>/Resource Adapters/JDBC/deploy
,如图 7 所示: CWYBC_JDBC.rar
,单击 Open,然后单击 Finish。如果打开一个对话框并询问您是否要切换到 J2EE 透视图,请单击 No,因为您要继续在 Business Integration 视图中工作。 除导入 JDBC 资源适配器外,您还需要从 DB2 安装将两个 jar 添加到工作区,然后将其放在资源适配器项目构建路径上。不同的数据库需要复制不同的 jar;有关详细信息,请参考参考资料部分中的适配器文档。
<DB2_Install_Location>/SQLLIB/java
中找到 db2jcc.jar
和 db2jcc_license_cisuz.jar
。
创建入站导出
导入并设置了 JDBC 资源适配器后,便准备好了使用 Enterprise Service Discovery 向导发现服务。在本部分中,您将创建一个导出,当修改数据库表时,适配器从该导出发送更新。您将使用与发现的服务对应的接口和业务对象创建导出。
在下面的第一组步骤中,将 Enterprise Service Discovery 向导配置为连接到数据库:
|
jdbc:db2:ABCFIN
,如图 11 所示。前缀 jdbc:db2
指示连接指向 DB2 UDB 服务器,ABCFIN
表示 DB2 客户端上的 DB2 数据库目录项。
com.ibm.db2.jcc.DB2Driver
(如图 11 所示)。这会加载发现向导连接到数据库所必需的 DB2 通用 JDBC 驱动程序。此值特定于每个 JDBC 供应商;对于其他数据库,请查阅适配器文档或咨询 JDBC 供应商。 在以下各步骤中,您可以使用 Enterprise Service Discovery 向导发现用于检索和更新数据库中数据的业务对象。这些业务对象将用作模块导入和导出操作的输入和输出。
在接下来的页面上,您可以创建用于数据库导出的操作,然后创建模块以包含导出并配置适配器的属性。
Create
、Update
和 Delete
操作将用于数据库服务。 ABCFIN
作为模块名称,然后单击 Finish。向导将关闭,您将退出 Enterprise Service Discovery 向导。在缺省情况下,导出名称(在 Name 旁边显示)为 JDBCInboundInterface
。
widNode/db2alias
。当应用程序运行时,将使用此值确定是否授权用户连接数据库。稍后您将在服务器上配置使用此别名的用户 ID。
DB2
。接受其他字段的缺省值,然后单击 Finish。 图 15 显示了使用 Enterprise Service Discovery 向导创建导出后的工作区内容。图 16 显示了 JDBCInboundInterface 接口。它包含 createDb2adminCustomer
、updateDb2adminCustomer
和 deleteDb2adminCustomer
操作,当 CUSTOMER 数据库中的行上发生创建、更新或删除事件时,JDBC 资源适配器将调用这些操作。这些操作是单向的,因为它们仅用于通知数据库事件的应用程序。在本例的 Db2admin
中,用于访问数据库的帐户名称预先计划到每个业务对象。
接口中的每个操作采用 Db2adminCustomerBG 业务图(如图 17 所示)作为输入。因此,在事件发生时,行中添加或更改的数据将包含在业务图的业务对象中。
创建出站导入
在本部分中,将创建允许模块访问 ABCINS 数据库的导入。您可以创建一个导入,使应用程序也能够访问 ABCFIN 数据库,但是在本场景中,我们仅关注的是通知 ABCFIN 更新和同步。
jdbc:db2:ABCINS
,将 Jdbc Driver Class 设置为 com.ibm.db2.jcc.DB2Driver
。注意,此步骤与导出部分中的配置步骤相同,不过数据库名称是 ABCINS,而不是 ABCFIN。
widNode/db2alias
。
DB2
。接受其他字段的缺省值,然后单击 Finish。 图 18 显示了对出站服务完成 Enterprise Service Discovery 向导后,Business Integration 视图中的 ABCFIN
模块。注意,现在有 JDBCOutboundInterface
接口和 Db2adminCustomerContainer
业务对象。
图 19 中显示的 JDBCOutboundInterface 包含双向操作,它允许您从数据库创建、更新、检索和删除行。该操作与入站操作使用相同的 Db2adminCustomerBG
业务图。图 20 显示的 Db2adminCustomerContainer
是一个业务对象,它包含一组 Db2adminCustomerBG
业务图。允许 JDBC 服务使用 retrieveAll 操作处理数据库的多个行。
图 20. Db2adminCustomerContainer 业务对象
您已经使用 Enterprise Service Discovery 向导完成了创建导入和导出。如果发生错误,或希望更改您设置的任何值,则可以在导入或导出的属性视图中修改 EIS 绑定值。不过,您无法更改接口。如果需要添加、删除或修改操作,则必须再次运行向导。
创建业务逻辑
在本部分中,您将创建业务逻辑,该业务逻辑使用您在先前部分中创建的 JDBC 资源适配器导出和导入。根据您的业务部门不同,在数据库更改经过导入时,并在通过导入将数据发送到数据库或从数据库获取数据之前,逻辑可能要执行许多操作。您甚至可能希望不同的模块分别使用导入和导出。在我们的示例中,通过将更新从 ABCINS 发送到 ABCFIN,仅让两个数据库与单个模块保持同步。因此,业务逻辑只包含接口映射,即将出站接口映射到入站接口。此业务逻辑意味着调用导出的任何服务都可以传递到导入。
要创建接口映射,请执行以下步骤:
ABCFIN
,然后对于 Name,请输入 DataSyncMediation
,如图 21 所示: JDBCInboundInterface
导出匹配(为 DataSyncMediation
选择的接口),并且只有一个接口与 DataSyncMediation
引用匹配(JDBCOutboundInterface
导入),所以创建的连接如图 24 所示: 您已完成使用 JDBC 资源适配器实现导入和导出。在下一部分中,我们将运行应用程序。
在服务器上部署和运行
在运行 JDBC 资源适配器应用程序之前,您需要配置服务器,以便资源适配器可以对数据库进行身份验证。第一步是将我们前面提到的别名映射到数据库的用户 ID 和密码。
db2alias
,并且对于 User ID 和 Password,为 DB2 安装输入有效的用户 ID 和密码,如图 26 所示: 接下来,需要将模块添加到服务器。
所有内容成功发布后,您会在控制台中看到消息 Polling has started
。此消息意味着服务器正在侦听数据库中发生的事件。
现在,让我们看一下数据库同步应用程序如何工作。为此,您可以向 ABCFIN(我们希望保持 ABCINS与之同步的数据库)中的 CUSTOMER 表添加行。这会导致前面创建的触发器运行,并将事件放入事件数据库。
可以看到,ABCINS 数据库现在包含您在 ABCFIN 数据库的新行中输入的值。
|
结束语
在本文中,您学习了 JDBC 资源适配器的一些基础知识,以及该资源适配器如何支持入站和出站处理。您建立了两个示例数据库,然后又构建了一个应用程序,该应用程序使用资源适配器将一个数据库的任何更改复制到另一个数据库。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者