基于WAT的WebSphere资源适配器EMD开发

概述

    WebSphere资源适配器(WebSphere Adapter,以后简称适配器)是基于WebSphere服务器的SOA(Service Oriented Architecture)解决方案的重要组件。无论是WPS(WebSphere Process Server)还是WAS(WebSphere Application Server)在连接外界企业信息系统(Enterprise Information System,EIS)的时候,都需要开发,部署和配置相应的资源适配器组件。在运行时(Runtime),WPS基于SCA(Service Component Architecture)标准与适配器交互,而WAS基于JCA(Java Connector Architecture)标准与适配器交互。  
  无论是基于何种运行时标准,开发时(Development time)都需要发现EIS的元数据,此时WebSphere企业集成开发工具WID基于通过EMD(Enterprise Metadata Discovery)标准与适配器交互从而取得特定EIS的元数据。  
  所以一般来说,WebSphere适配器要符合SCA,JCA和EMD这三个标准,而基于WebSphere资源适配器开发工具包WAT(WebSphere Adapter Toolkit)和适配器基础类集AFC(Adatper Foundation Classes)开发的适配器将自动地符合这三个标准,并具备较好的实用性。本文将以一个自定义的EIS服务器WDE(WebSphere Demo EIS)为例,介绍在WID下借助WAT开发适配器的EMD部分的流程。

常用属性类

  在开发EMD时标准中,EMD的开发时环境WID与实现EMD的适配器之间的主要通过commonj.connector.metadata.discovery.properties.PropertyGroup和commonj.connector.metadata.discovery.properties.PropertyDescriptor接口交互。属性组接口PropertyGroup代表一组用户设置的属性,属性接口PropertyDescriptor代表一个属性。为方便EMD开发,AFC中对属性组和属性做了基本实现。其中常用的有WBIPropertyGroupImpl,WBISingleValuedPropertyImpl和WBIFileProperty几个类。WBIPropertyGroupImpl定义了一组EMD属性,属性组的成员既可以是属性组也可以是单一属性。WBISingleValuedPropertyImpl定义了一个可以在界面操作的单一属性,属性值的类型和显示方式可以由开发者任意设定。WBIFileProperty定义了一个可以浏览并选择打开本地文件的控件,可以用来提供选择驱动文件。我们将在本文的例子中多次使用它们并展示它们的用法。

加载EIS驱动程序

  一般连接EIS都需要调用来自EIS或第三方的驱动程序,例如连接数据库的JDBC资源适配器就需要调用来自数据库提供商的jdbc驱动程序。所以资源适配器的EMD流程中都会有一个配置EIS驱动程序的页面。在本例WDE适配器中,我们假设来自WDE的驱动程序为"WDEDriver.jar"。相应页面的代码要实现接口commonj.connector.metadata.discovery.AdapterConfiguration的createAdapterEnvironmentProperties方法,实现中我们使用了WBIFileProperty类,编写一个显示为“WDEDriver.jar”的文件浏览控件,在实现类WDEAdapterConfiguration的createAdapterEnvironmentProperties方法中添加以下代码:


   ret = new WBIPropertyGroupImpl("DependentFiles");
   WBIFileProperty wdeDriverProperty = new WBIFileProperty("wdedriver.jar", File.class);
   wdeDriverProperty.setDisplayName("WDEDriver.jar");
   wdeDriverProperty.setDescription("Dirver to connect ot the WDE server");
   ret.addProperty(wdeDriverProperty);

同时,要在"discovery-service.xml"中配置相应AdapterConfiguration的实现类:

  com.yourcompany.adapter.wde.emd.discovery.WDEAdapterConfiguration
  
  在实现了WDEAdapterConfiguration类并添加以上配置到"discovery-service.xml"后,EMD过程将显示一下页面:
21408685_200905241256521.jpg

设置连接属性

  在根据"discovery-service.xml"中配置的AdapterConfiguration选定了所需的EIS驱动文件后,WID会根据在"discovery-service.xml"中配置的MetadataDiscovery类来建立元数据发掘连接(Metadata Discovery Connection)。建立连接的大部分代码是由WAT自动实现的,其中包括:AdapterType的实现类以及通过AdapterType方法得到的OutboundConnectionType实现和InboundConnectionType实现。本例中OutboundConnectionType的实现为WDEOutboundConnectionType,其createOutboundConnectionConfiguration方法返回一个OutboundConnectionConfiguration的实例。这个实例的具体实现类是WDEOutboundConnectionConfiguration,这个类通过实现createUnifiedProperties方法支持设置连接属性的功能,这个函数返回一个包含所有EMD连接属性的属性组。对于我们的WDE Adapter,我们在WDEOutboundConnectionConfiguration的createUnifiedProperties方法中添加了以下代码:

  WBIPropertyGroupImpl connectionProperties = new WBIPropertyGroupImpl("ConnectionProperties");
  WBISingleValuedPropertyImpl wdeAddress = new WBISingleValuedPropertyImpl("Address", String.class);
   wdeAddress.setDisplayName("Address");
   connectionProperties.addProperty(wdeAddress);
   WBISingleValuedPropertyImpl wdePort = new WBISingleValuedPropertyImpl("Port", Integer.class);
   wdePort.setDisplayName("Port");
   wdePort.setDefaultValue(80);
   connectionProperties.addProperty(wdePort);
   WBISingleValuedPropertyImpl wdeUserName = new WBISingleValuedPropertyImpl("UserName", String.class);
   wdeUserName.setDisplayName("User name");
   connectionProperties.addProperty(wdeUserName);
   WBISingleValuedPropertyImpl wdePassword = new WBISingleValuedPropertyImpl("Password", String.class);
   wdePassword.setDisplayName("Password");
   wdePassword.setSensitive(true);
   connectionProperties.addProperty(wdePassword);


  在这段代码中我们看到WBISingleValuedPropertyImpl的setDisplayName方法可以设置属性的显示名称,

setDefaultValue方法可以设置属性的默认值,setSensitive方法可以使用户在界面输入密码值使隐藏密码内容。我们在返回的连接属性组中添加4个属性,在EMD过程中将显示如下页面:
21408685_200905101846211.jpg
  这些连接属性是元数据发掘时期(EMD)和运行时期(Runtime)共同需要。事实上在WID中运行EMD建立连接的过程也是使用连接工厂MCF(Managed Connection Factory)。我们要在MCF的类中添加同连接属性相对应的的Java Bean属性。例如本例中的连接属性是Address,Port,UserName和Password,那么在相应的MCF类WDEManagedConnection中就要实现相应的Java Bean属性方法setAddress(),getAddress(),setPort(),getPort(),setUserName(),getUserName()和setPassword(),getPassword()。在这些方法实现后,WID在EMD运行过程中可以将用户设置的连接属性复制到MCF并调用MCF的createManagedConnection()创建到EIS的连接。
创建元数据树(MetadataTree)

  元数据发掘连接建立后,WID会调用MetadataDiscovery实现类(WDEMetadataDiscovery)的getMetadataTree(MetadataConnection conn)方法得到元数据树的实现(WDEMetadataTree)。
  在WDEMetadataTree中WID首先调用的是createFilterProperties()方法。通过实现这个方法EMD开发者可以设计自己的元数据过滤器,用以过滤顶层元数据(Top Level MetadataObject)。在本例中我们添加了一个Filter属性“DIR”,通过名字来过滤顶层元数据。这个过滤器在EMD过程中显示为:
21408685_200905241533011.jpg
  在EMD用户设定了相应过滤器值之后,WID将调用WDEMetadataTree的listMetadataObjects(PropertyGroup filterParameters)方法,将用户设置的过滤器值回传给EMD开发者,开发者通过在listMetadataObjects方法中将实际元数据与过滤器相比较,只显示用户期望的元数据。在本例中,listMetadataObjects方法只返回与过滤器中DIR值相等的目录,如下图:
21408685_200905241541261.jpg

发掘元数据对象(MetadataObject)

  EMD过程的主要目标就是发掘元数据,选择业务对象BO(Business Object),并最终生成针对业务对象的数据结构。EMD开发者根据EIS的不同特点将EIS的元数据结构化地组织成树状结构(MetadataTree)。每一个元数据都是树中的一个子节点,每一个对应业务对象的元数据都是树中的一个叶子节点。元数据的实现类是WBIMetadataObjectImpl的子类,其中createFilteringProperties()和getChildren(PropertyGroup filterParameters)方法同MetadataTree中的两个方法作用相似:前一个创建过滤器,后一个将用户过滤器值回传,并列出子元数据。在本例中,WDE适配器采用两层的元数据,第一层(顶层)为元数据目录,第二层为业务对象,如下图:
21408685_200905241602131.jpg

业务对象配置属性(MetadataImportConfiguration)

  对于任意选定的业务对象(Business Object),EMD进程允许用户配置特定的属性。通过实现MetadataImportConfiguration接口中的createConfigurationProperties()方法,EMD的开发者可以针对自己的EIS设计不同的属性配置。在本例中,我们在类WDEMetadataImportConfiguration中的createConfigurationProperties()方法中添加了一个String类型的属性“Business Object Name”。这样在用户通过双击鼠标或点击“>”选择导入某个业务对象时,就会弹出下面的窗口要求用户配置业务对象属性:
21408685_200905241928381.jpg
  在用户配置完属性之后,选定的的对象会如下图列在选定对象窗口,用户可以点击下一步,也可以点击选定对象窗口右上角的按钮修改配置属性。
21408685_200905241936391.jpg

设置元数据选择(MetadataSelection)属性

  业务对象选择和属性设置完成之后,下一步是让用户针对所选择的所有对象配置EMD物件(Artifact)生成所需的属性。常用的属性包括:所选对象所支持的操作,所生成对象的名字空间,保存所生成对象的相对目录等。EMD开发者可以实现接口MetaSelection的createSelectionProperties()方法来支持这些属性。例如本例中在该方法中添加了上面提到的3个属性,在EMD过程中就会有以下配置页面:
21408685_200905242006151.jpg

生成EMD工件(Artifact)定义

  在用户设置完元数据选择属性之后,也就完成了所有与将要生成EMD工件结构相关的属性设置,同时结合从EIS得到的元数据,所有生成EMD工件所需的信息已经基本齐备。之所以说基本,主要是针对EIS元数据对象而言。此时用户已经确定选择了EIS的元数据对象,但所选元数据对象的具体元数据内容不一定完全被取到EMD本地。何时将元数据有EMD的具体实现决定。这时WID会调用MetadataDiscovery接口的方法createServiceDescription(MetadataSelection importSelection)方法创建ServiceDescription对象和所需的DataDescription。传入的MetadataSelection参数包括了两类信息:一类是上一节用户设置的元数据选择属性,用MetadataSelection.getAppliedSelectionProperties()可以得到;另一类是用户所选择的元数据对象,用MetadataSelection.getSelection()可以得到。如果元数据对象只包含基础信息而不包含详细内容,那么createServiceDescription方法中需要从EIS取得详细的元数据内容。在createServiceDescription返回时,所有ServiceDescription对象和所需的DataDescription已经生成完毕;其中ServiceDescrition包含了方法绑定(Method Binding)的定义,DataDescription包含了业务对象(Business Object)的定义,只是它们的内容还没有序列化到文件里。

设置运行时期连接属性和部署属性

  工件定义完成后,WID会展示以下页面请用户设置运行时期的连接属性和部署属性。在下图中,用户可以更改服务操作(Service operations)的名称和部署属性(Deployment properties),这两类属性资源适配器通用属性与具体适配器EMD开发无关。而运行时期连接属性(Connection properties)是由WID第二次调用OutboundConnectionConfigurationcreateUnifiedProperties方法创建的。前一次调用是为了建立EMD过程期间到EIS的连接,而第二次调用是设置运行时期的连接工厂(MCF)属性。两次属性可以不同,也可以相同;如果相同,可以用以下代码将前一次用户所设置的值复制到当前属性,这样就将显示下图中的连接属性:


if (getAppliedProperties() != null) 
            EMDUtil.copyValues(getAppliedProperties(), connectionProperties);


21408685_200905242306061.jpg
设置项目模块属性

     在WID中EMD过程的最后一个步骤是设置置项目模块属性。在这一页中,除了设置生成的绑定接口名称之外,其他设置都跟在Eclipse中创建和设置其他项目属性的过程一样。而接口的名称通过ServiceDescription.setName方法设置;在本例中,我们设置其默认值为WDEOutboundInterface以利于用户将此接口与连接其他EIS的接口区分。
21408685_200905251138461.jpg

总结

   本文以开发连接假定EIS服务器WDR(WebSphere Demo EIS)为例,详细介绍了基于WAT和AFC开发WebSphere资源适配器EMD的过程。一般来说,一个EMD过程,包括加载EIS驱动程序,设置连接属性,创建元数据树,发掘元数据,选择业务对象并设置业务对象属性,设置元数据选择属性,生成EMD工件定义,设置运行时期连接属性和设置项目模块属性几个步骤。本文以WDE适配器为例,配合EMD界面详述了每一个步骤的EMD代码开发接口,希望能对刚刚开始运用相关技术的开发人员有所帮助。

中英文名词对照

适配器、资源适配器:Adapter/Resource Adapter
面向服务的架构:SOA/Service Oriented Architecture
WebSphere应用服务器:WAS/WebSphere Application Server
WebSphere流程服务器:WPS/WebSphere Process Server
企业信息系统:EIS/Enterprise Information System
开发时期连接:Development time connection
运行时期连接:Runtime connection
服务组件架构:SCA/Service Component Architecture
Java连接器架构:JCA/Java Connector Architecture
企业元数据发掘:EMD/Enterprise Metadata Discovery
WebSphere企业集成开发环境:WID/WebSphere Integration Developer
WebSphere适配器开发包:WAT/WebSphere Adapter Toolkit
适配器基础类集:AFC/Adatper Foundation Classes
本例、示例EIS:WDE/WebSphere Demo EIS
属性组:PG/PropertyGroup
属性:Property
数据发掘连接:Metadata Discovery Connection
连接工厂/受管连接工厂:MCF/Managed Connection Factory
元数据树:MetadataTree
元数据过滤器:FilteringProperties
元数据对象:MetadataObject
业务对象:BO/Business Object
业务对象配置:MetadataImportConfiguration
元数据选择属性:MetadataSelection
工件:Artifact
顶层元数据:Top Level MetadataObject
服务描述对象:ServiceDescription
数据描述对象:DataDescription
方法绑定:Method Binding

fj.pngDiscovery Configuration.jpg

fj.pngRequired Files and Libraries.jpg

fj.pngQuery Properties.jpg

fj.pngObject Discovery and Selection - MetadataTree.jpg

fj.pngObject Discovery and Selection - MetadataObject.jpg

fj.pngObject Discovery and Selection - MetadataImportConfiguration.jpg

fj.pngObject Discovery and Selection - Selected Objects.jpg

fj.pngConfigure Composite Properties.jpg

fj.pngService Generation and Deployment Configuration.jpg

fj.pngSerice Location Properties.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21408685/viewspace-594616/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21408685/viewspace-594616/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值