中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > Java与XML
在WBI Server Foundation中使用WBI JDBC Adapter整合数据库应用
作者:未知 时间:2005-08-10 17:59 出处:Java频道 责编:chinaitpower
              摘要:在WBI Server Foundation中使用WBI JDBC Adapter整合数据库应用

一、 引言
在企业级生产环境中,往往存在着各种异构的应用系统和数据库。如果我们要利用这些系统的数据或功能,而它们又没有提供对外的接口,或者利用原有接口开发的难度很大,如何解决这一难题?IBM提供了各种WebSphere Business Integration Adapter,我们可以通过配置这些Adapter直接连接后台系统。

主要有两种Adapter:Application Adapters和Technology Adapters,前者包括SAP、Sibel和IBM MQ等针对应用系统的适配器,后者则是对标准技术接口的,包括连接数据库的JDBC、与邮件系统交互的Mail、处理文本文件的JText和通过XML/HTTP接口交互的XML适配器。本文中,我们将以JDBC Adapter为例,动态提取原有数据库系统的信息,实现数据同步。其他 Adapter 的使用方法与之类似。

二、拓扑结构
假设生产环境中有人力资源系统向数据库中录入新员工数据,而我们的J2EE应用程序需要同步地获取这些信息,应用Adapter作为中介器的拓扑结构如下所示:


如上图所示,右边的人力资源系统向数据库中不断传输数据,而JDBC Adapter监听数据库的变化,将新增数据传递给WebSphere MQ 的消息队列。WebSphere中的J2EE应用程序通过侦听队列的Message-Driven Bean获取消息数据,并调用Session Bean中的业务逻辑来实现信息同步。

除了应用系统和数据库,实现这种解决方案的产品包括:

IBM WBI Adapter Framework v2.4:是各种Adapter的容器和运行时环境。
IBM JDBC Adapter: 与数据库连接的Adapter,在WBI Adapter Framework的基础上安装和运行。
IBM WBI Server Foundation v5.1:J2EE应用系统的运行环境。
IBM MQ v5.3:在WebSphere和数据库之间进行可靠数据传输的中间件。
IBM WSAD IE v5.2:配置连接操作的工具环境。

三、配置Adapter和数据库协同工作
首先安装DB2和WSADIE。注意WSADIE的安装路径中不要出现空格。安装WBI Adapter Framework v2.4,它是Adapter的运行环境。然后在同一台机器上安装JDBC Adapter。按照安装向导的提示操作即可,这里不再赘述。

需要注意的是,在安装Adapter Framework时,开发环境要选择现有的WSADIE,而不是Framework自带的系统管理器。

IBM JDBC Adapter支持DB2、Oracle和MS SQL Server等主要数据库产品。这里我们采用DB2数据库作为示范。首先在数据库中新建一个名为AISWBI的database,以db2admin用户的身份建立一张名为TEACHER的表,它的DDL描述如下所示:



CREATE TABLE DB2ADMIN.TEACHER  ( 	ID INTEGER NOT NULL , 
NAME VARCHAR(10) NOT NULL , AGE INTEGER NOT NULL );  
ALTER TABLE DB2ADMIN.TEACHER ADD CONSTRAINT CC1078998262226 PRIMARY KEY(ID);

在相同的database中添加JDBC Adapter监听的两张专用表xworlds_events和xworlds_archive_events,它们的DDL描述如下所示(schema也是db2admin):



	CREATE TABLE DB2ADMIN.xworlds_events (        
	event_id       INTEGER     NOT NULL PRIMARY KEY GENERATED BY 
	DEFAULT AS IDENTITY (START WITH 0 , INCREMENT BY 1 , NO CACHE ),
	connector_id   VARCHAR(40),
	object_key		VARCHAR(80)	NOT NULL,
	object_name		VARCHAR(40)	NOT NULL,
	object_verb		VARCHAR(40)	NOT NULL,
	event_priority INTEGER	   NOT NULL,
	event_time		TIMESTAMP,
	event_status	INTEGER	   NOT NULL,
	event_comment	VARCHAR(100))@

CREATE TABLE DB2ADMIN.xworlds_archive_events (
	event_id	   	INTEGER     NOT NULL	PRIMARY KEY,
	connector_id   VARCHAR(40),
	object_key		VARCHAR(80)	NOT NULL,
	object_name		VARCHAR(40)	NOT NULL,
	object_verb		VARCHAR(40)	NOT NULL,
	event_priority	INTEGER	   NOT NULL,
	event_time		TIMESTAMP,
	archive_time  	TIMESTAMP,
	event_status  	INTEGER	   NOT NULL,
	event_comment 	VARCHAR(100))@
	

假设人力资源系统会在表TEACHER中存入新员工的数据。我们希望在数据录入的同时将它同步到新的应用系统中,就需要利用数据库的触发器功能,把新增条目的信息传递给JDBC Adapter监听的专用表xworlds_events。在同一个database中建立这个触发器,其DDL如下所示:



create trigger NotifyMyDemoAdd after insert on db2admin.TEACHER referencing new as n 
for each row mode db2sql insert into db2admin.xworlds_events 
(object_key,object_name,object_verb,event_priority,
event_time,event_status,event_comment) values
(CAST( CAST(n.ID AS CHAR(2)) AS VARCHAR(80)) , 'TEACHER', 
'Create', 1, current timestamp, 0, 'Insert a new record')@

Adapter将新增条目传递出去之后,会把条目信息转移到表xworlds_archive_events中,作为归档信息。

Adapter是通过Agent连接和监听数据库的,因此需要配置启动Agent的批处理文件,提供数据库JDBC驱动所在的位置。定位到JDBC Adapter安装路径下的connectors\JDBC目录,编辑start_JDBC.bat文件,添加如下声明:



SET JDBCDRIVERPATH=%Product_DIR%\java\db2java.zip

其中%Product_DIR%为DB2的安装路径。 定位到含有"-Djava.library.path="的段落,在最后添加";%Product_DIR%\lib",如下所示,假设DB2安装路径为D:\SQLLIB。



-Djava.library.path="%CROSSWORLDS%"\bin;%CONNDIR%;"%MQ_LIB%";
%JRE_EXT_DIRS%;D:\SQLLIB\BIN

JDBC Adapter在映射数据库对象时也要连接数据库,这是通过Object Design Agent代理进行连接的,因此需要配置启动Agent的批处理文件。

定位到JDBC Adapter安装路径下的ODA\JDBC目录,编辑start_JDBCODA.bat文件,在"set DRIVERPATH="这一行的末尾添加";%Product_DIR%\java\db2java.zip"。

再添加如下声明:



set DRIVERLIB=%Product_DIR%\bin

四、配置Adapter和MQ协同工作
首先安装MQ v5.3。要使Adapter和MQ协同工作,需要在MQ中定义Adapter用到的队列和队列管理器。首先定位到JDBC Adapter安装路径下的templates目录,创建一个文本文件WBIA_queues.txt,列出所有的队列定义,其中"JDBCCONNECTOR"变量是我们定义的连接器名称。文件内容如下:



        DEFINE QLOCAL(JDBCCONNECTOR/AdminInQueue)
    DEFINE QLOCAL(JDBCCONNECTOR/AdminOutQueue)
    DEFINE QLOCAL(JDBCCONNECTOR/DeliveryQueue)
    DEFINE QLOCAL(JDBCCONNECTOR/RequestQueue)
    DEFINE QLOCAL(JDBCCONNECTOR/ResponseQueue)
    DEFINE QLOCAL(JDBCCONNECTOR/FaultQueue)
    DEFINE QLOCAL(JDBCCONNECTOR/SynchronousRequestQueue)
    DEFINE QLOCAL(JDBCCONNECTOR/SynchronousResponseQueue)
    

在DOS下定位到该目录,输入命令:



configure_mq QM_WBIA WBIA_queues.txt

其中QM_WBIA为队列管理器的名称。

打开MQ的资源管理器,右击队列管理器QM_WBIA,选择"启动",启动该管理器下的所有队列。展开"队列"节点,可以看到启动的队列,如下所示:


五、配置WBI Server Foundation 测试环境
接下来,在WSADIE中配置测试环境,步骤如下:

1)定位到JDBC Adapter安装路径下的bin目录,编辑startcsm.bat文件,更改两个变量定义:



set WSWB_EXECUTABLE=%WSADIE%\wsappdevie.exe
set WSWB_PATH=%WSADIE%

其中%WSADIE%变量为WSAD安装目录。再更改下面一行:



"%WSWB_EXECUTABLE%" -data "%workspace%" -vm %JRE_BIN%\javaw.exe 
-vmargs %ORB_PROPERTY% -DCWTools.home="%CROSSWORLDS%\bin"

其中%workspace%为WSAD工作区的路径,注意其中不要出现空格。

2)更改完毕,双击该批处理文件启动WSADIE。

3)切换到服务器视图,右击服务器透视图,选择"创建服务器和服务器配置",选择服务器类型为"集成测试环境",输入服务器名称为"WASEServer",单击"完成"创建测试服务器。

4)双击服务器WASEServer,打开服务器管理工具。切换到变量页面,在"节点设置"目录下选择"MQ_INSTALL_ROOT"变量,单击"编辑"按钮,输入MQ的安装路径。

5)切换到EJB页面,单击"添加"按钮,输入以下内容:


按确定返回。

6)切换到配置页面,选中"启动管理控制台",保存并启动测试服务器。在网络浏览器中打开WebSphere管理控制台,网址是http://localhost:9090/admin。

7)展开"资源"节点,点击"WebSphere MQ JMS 提供程序",在右边的"WebSphere MQ JMS Provider"页面中点击"WebSphere MQ 队列连接工厂",在新页面中点击"新建"按钮。

8)依次输入队列工厂的各项参数,并保存修改:


9)在"WebSphere MQ JMS 提供程序"页面中选择"WebSphere MQ 队列目的地",单击"新建"按钮,依次建立如下的队列:


以下属性所有队列均相同,其他属性均取缺省值。


六、配置和运行WebSphere应用
1、创建服务项目

将WSADIE切换到业务集成透视图,新建一个服务项目,命名为MyDemoAdapter,在其下创建一个名为mydemo的package。

2、创建企业应用程序和EJB项目

1)从菜单中选择"文件"/"新建"/"项目",在弹出对话框中从"J2EE"选项中选择"企业应用程序",单击"下一步"按钮。

2)选择J2EE 1.3版本并单击下一步。

3)在企业应用程序页面中进行如下选择:


4)单击"完成"按钮。

3、创建业务对象和连接器

1)将WSADIE切换到系统管理器透视图,右击"集成组件库",选择"新建集成组件库",在弹出对话框中输入"MyDemoAdapterDef",创建组件库项目。

2)右击组件库项目下的"业务对象",选择"新建业务对象",启动业务对象设计器。

3)在Windows的开始项中选择"程序"/"IBM WebSphere Business Integration Adapters"/"适配器"/"Object Discovery Agent"/"JDBC Object Discovery Agent",启动ODA。

4)在"新建业务对象"对话框中选择"取消"按钮,在菜单中选择"文件"/"使用ODA新建",在弹出对话框中选择"查找代理程序",选中找到的代理,单击下一步,如下图所示:


5)在对话框中输入以下值:


如下图所示,单击下一步。


6)展开schema,选中表TEACHER,单击下一步,如下图所示。


7)在确认窗口中选择下一步,在"BO属性"窗口中更改"添加存储过程属性"值为"No",单击下一步。

8)单击"完成"按钮,在项目中生成名为"TEACHER"的业务对象,如下图所示:


9)保存并退出。

10)在集成组件库项目中选中"连接器",右击选择"创建新的连接器",在弹出的"连接配置器"窗口中单击"取消"按钮。

11)从菜单中选择"文件"/"打开"/"从文件",在"打开文件浏览器"窗口中打开Adapter安装路径下的repository\JDBC目录,再把文件类型改为"所有文件",双击打开CN_JDBC.txt。

12)从菜单中选择"文件"/"另存为"/"至项目",单击"保存"按钮,将连接器保存到MyDemoAdapterDef项目。关闭连接配置器,再双击连接器项目下的JDBCConnector节点打开配置器。

13)在标准属性页面输入:


其中%Workspace%为工作区的路径。

14)单击"保存"按钮,关闭连接配置器,再双击连接器项目下的JDBCConnector节点打开配置器。

15)切换到"特定于连接器的属性"页面,输入:


其中ApplicationPassword和ApplicationUserName分别是连接数据库的密码和用户名。

16)关闭连接配置器,再双击连接器项目下的JDBCConnector节点打开配置器。切换到"受支持的业务对象"选项卡,选择TEACHER对象。

17)保存修改。在菜单中选择"文件"/"保存"/"至文件",保存到C:\JDBCConnector文件。关闭配置器。

4、将JDBC Adapter配置导至服务项目

1)在WSADIE的系统管理器视图中,选中"用户项目",右击选择"新建用户项目",输入"MyDemoAdapterUserProject",从可用的集成组件库中选择"WBIAdapterDef",单击"完成"按钮,如下所示:


2)右击MyDemoAdapterUserProject项目,选择"部署WAS项目",在弹出窗口中选中JDBCConnector及其子节点,单击下一步,选中"导出至服务项目",如下所示。


3)单击"浏览"按钮,在弹出窗口中选中MyDemoAdapter项目中的mydemo目录,单击"确定"按钮。在"部署向导"页面单击"完成"按钮。

4)切换到业务集成透视图,选择"服务项目"/"MyDemoAdapter"/"mydemo",右击选择"刷新"按钮,显示如下文件:


其中TEACHER.xsd是数据库TEACHER表对应的业务对象模型,而三个wsdl文件是连接器的Service描述。

5、部署JDBC Adapter的侦听服务

1)选中MyDemoAdapter项目\mydemo目录下的JDBCConnector.wsdl文件,右击选中"新建"/"构建自服务",从"创建服务框架"中选择"EJB服务框架",单击下一步。

2)在"新建"页面直接单击下一步,在创建服务框架页面选择端口类型为"TEACHERAgentDelivery",单击下一步。

3)在"EJB框架"页面选择EJB项目为"MyDemoAdapterEJB",单击"完成"按钮。

4)从mydemo目录下选择新建的TEACHERAgentDeliveryEJBService.wsdl文件,右击选择"企业服务"/"生成部署代码",在弹出窗口中输入:


如下所示,单击下一步:


5)在"入站服务文件"中浏览选择MyDemoAdapter项目中mydemo目录下的JDBCConnectorJMSService.wsdl文件,并在端口名中选择TEACHERAgentDeliveryBindingPort,单击"完成"按钮。如下图所示:


6)在弹出的"修复服务器配置"窗口中点击"确定"按钮。

7)切换到"J2EE层次结构",展开"EJB模块"/"MyDemoAdapterEJB"项目,打开"EJB部署描述符"窗口,选择"Bean"选项卡,选择"TEACHERServiceMDB",将ListenerPort改为AIS_CUSTOMERAgentDeliveryBindingPort。

8)切换到引用选项卡,展开TEACHERServiceMDB,选择"ResourceEnvRef",把JNDI名称设为wbia/ibm/com/JDBCJDBCCONNECTOR/DELIVERYQUEUE。选择"ResourceRef",把JNDI名称设为wbia/ibm/com/JDBCQCF。保存修改。

9)选中MyDemoAdapterEJB项目,右击选择"生成"/"部署和RMIC代码",部署EJB。

10)展开MyDemoAdapterEJB项目中的TEACHERAgentDelivery,定位到TEACHERAgentDeliveryBean类中的TEACHERCreate方法,在user code注释中添加如下代码:



				System.err.println("\n*** We have a new customer! ***\n");
		System.err.println("Customer Number: " + argBodyPart.getID());
		System.err.println(
			"Name: " + argBodyPart.getNAME() );
		System.err.println("Age: " + argBodyPart.getAGE());
		

这段代码是用于在应用系统接收到同步的数据时显示数据内容。保存修改。

6、运行数据同步应用

1)在DOS下输入%Adapter%\connectors\JDBC\start_JDBC.bat JDBC WAS -cC:\JDBCConnector.cfg,其中%Adapter%为Adapter Framework的安装路径,启动JDBC连接器。如下所示:


2)启动WBI Server Foundation 测试服务器。

3)向数据库中的表TEACHER插入一条数据,如执行下面的SQL语句:



connect to AISWBI@
insert into DB2ADMIN.TEACHER values(18,'li zhi',23)@
connect reset@

4)连接器窗口显示如下内容,表明侦听到并传输数据内容。


5)切换到WebSphere服务器控制台,显示如下信息,表明应用已经接收并打印到同步过来的数据信息。之后,我们就可以随意定制这些信息了。

七、总结
IBM WBI Adapter for JDBC提供了可靠地同步数据库信息的解决方案。通过与WebSphere Application Server 连接,用户可以把这种能力扩展到J2EE应用平台之上。同时,IBM还提供了与邮件系统交互、处理文本文件和通过XML/HTTP接口同步,以及连接SAP、Sibel等应用系统的Adapter,它们都可以通过本文的方法与WBI Server Foundation连接,实现以J2EE平台为核心的EAI。这也是IBM WBI的发展方向。

关于作者
李志,IBM 公司软件部工程师,主要负责业务流程整合,您可以通过goodlz@21cn.com与我联系。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有