内容


从 WebSphere Cast Iron Cloud Integration 调用 WebSphere Transformation Extender 数据图

Comments

简介

IBM® WebSphere® Transformation Extender 首次发布于 2005 年,以前称为 IBM DataStage TX(以下简称为 WebSphere TX)。WebSphere TX 数据图提供复杂的 “任意” 和 “多对多” 转换功能,可以单独执行,也可以嵌入其他 IBM 产品中,如 WebSphere Message Broker、WebSphere ESB 和 WebSphere DataPower SOA Appliances。

2010 年,IBM 收购了 Cast Iron Systems,开始向客户提供端到端平台,用该平台集成来自 ADP、Amazon、NetSuite 和 Salesforce.com 等供应商的云应用程序以及来自 JD Edwards 和 SAP 等供应商的企业内部应用程序。借助 Cast Iron 的数百个预先构建的模板,您可以避免昂贵的自定义编码工作,在数天而不是平常的数周或数月内完成企业云集成。可以使用物理设备、虚拟机或云服务实现这些结果。

Cast Iron 包含对 XSLT 的内置支持,以支持 XML 转换;它通过其 Web 服务支持在各种云服务供应商之间提供集成。本文描述了将 Cast Iron 的内置转换功能扩展到简单 XML 转换之外的一种方法:调用 WebSphere TX 数据图并将其作为 Web 服务向云公开。

先决条件

本文假定您拥有 WebSphere TX V8.3、WebSphere Cast Iron Studio V6.0、WebSphere Application Server V7 和 WebSphere Integration Developer V7。 本文还假定您拥有 WebSphere TX 基础知识,了解如何使用 “一个输入、一个输出卡(one input and one output card)” 创建简单的 WebSphere TX 数据图。

将 WebSphere TX 数据图托管为 Web 服务

WebSphere TX 提供一个软件开发工具包 (SDK),它包含一个 Java API。从 WebSphere TX V8.3 开始,这个 SDK 就与 Design Studio 捆绑在一起。该 Java API 支持 Java 程序创建表示 WebSphere TX 数据图的对象,配置并运行它们。

这个流程的第一步是创建一个 WebSphere TX 数据图。您可以使用 Design Studio 附带的一个示例数据图,比如州数据图,该数据图重新安排了美国各种的统计数据。该数据图位于 examples\general\states 下的 Design Studio 目录中。

  1. 在 Design Studio 中打开 states.mms 文件,构建名为 master 的数据图,以便生成一个名为 master.mmc 的可执行数据图。可以通过在 Design Studio 中运行来测试数据图。它应该读取输入文件 sts.txt 并生成一个如下所示的输出文件 output.txt:
    OH,257*IN,142*MI,154*WI,80*MT,5*ID,8*WY,3*CO,21*NM,
    8*AZ,15*UT,13*NV,4*MN,48*MO,67*ND,9*SD,9*KS,27
  2. 要使这个数据图对 Web 服务友好,需要对其进行一个小修改。打开 states.mtt 类型树,定位 Input 类别下的 United States 组。然后打开其属性并将 Group Subclass / Format / Component Syntax / Delimiter / Value 更改为 <LF>。这个更改会阻止数据图在 Design Studio 中运行,但不必担心;它将成为一个不错的 Web 服务。
    图 1. 更改分隔符
    更改分隔符
    更改分隔符
  3. 分析并保存类型树,然后重建数据图以生成一个新的 master.mmc 可执行数据图。
  4. 要从 Cast Iron Orchestration 运行这个数据图,必须先将其公开为 Web 服务。可以采用多种方法将数据图公开为 Web 服务。一种简单方法是使用 IBM Integration Developer (以前称为 WebSphere Integration Developer),它提供一个简单向导,用于从 Java 类生成 Web 服务。由于 WebSphere TX 提供了一个 Java API,这种方法非常适合。在 IBM Integration Developer 中打开 Web 透视图,新建一个 Dynamic Web Project。为该项目命名,然后单击 Finish
    图 2. 创建一个动态 Web 项目
    创建一个动态 Web 项目
    创建一个动态 Web 项目
  5. 接下来,您需要编写 Java 代码来调用 WebSphere TX 数据图,以便将其转换为 Web 服务。在此之前,确保项目理解 WebSphere TX Java API。打开项目的属性,导航到 Java Build Path 并将 dtxpi.jar(位于您的 Design Studio 或 WebSphere TX 安装目录中)作为一个外部 JAR 进行添加:
    图 3. 配置 Java 构建路径
    配置 Java 构建路径
    配置 Java 构建路径
  6. 在新项目中新建一个 Java 类,为其命名,然后单击 Finish
    图 4. 创建一个 Java 类
    创建一个 Java 类
    创建一个 Java 类
  7. 主编辑器中将显示一个空 Java 类。幸运的是,您不需要编写太多代码,可以将一个 WebSphere TX SDK 示例作为起点。在文本编辑器中打开 Example5.java,它位于您的 Design Studio 安装下的 examples\dk\dtxpi\java 目录中。
  8. 将下面的导入语句复制并粘贴到您的新 Java 类中:
    import com.ibm.websphere.dtx.dtxpi.MAdapter;
    import com.ibm.websphere.dtx.dtxpi.MCard;
    import com.ibm.websphere.dtx.dtxpi.MConstants;
    import com.ibm.websphere.dtx.dtxpi.MMap;
    import com.ibm.websphere.dtx.dtxpi.MStream;
    import com.ibm.websphere.dtx.dtxpi.MException;
  9. 将 main() 方法复制并粘贴到您的新 Java 类中,将其签名更改为 public String runMap(String szInputBuffer)
  10. 您将在每个调用中将输入缓冲区传递给 Web 服务,因此 szInputBuffer 的静态定义必须被移除://private static String szInputBuffer = "This is my input data";
  11. 由于会反复调用该类,因此应将初始化 WebSphere TX API 的代码移动到一个静态块中:
    static
    {
       try
       {
          MMap.initializeAPI(null);
       }
       catch (Throwable t)
       {
          t.printStackTrace();
       }
    }
  12. 您还必须移除或注释掉终止 WebSphere TX API 的代码行://MMap.terminateAPI();
  13. 州数据图只有一个输出卡,因此需要修改查找输出卡的代码行,使其指向输出卡 1 而不是输出卡 2:card = map.getOutputCardObject(1);
  14. 创建一个新 String 来持有数据图的输出:String outData = "";
  15. 将告知您使用数据图生成的数据执行什么操作的注释更改为将每个页面附加到输出 String 的代码行:outData += new String(page);
  16. 使您的 runMap 方法返回输出 String:return outData;
  17. 最后,更改数据图名称以指向您在 Design Studio 中构建的 master.mmc 文件:
    MMap map = new MMap("C:\\IBM\\WebSphere Transformation Extender 8.3
       \\examples\\general\\states\\master.mmc");
  18. 现在,您应该拥有一个构建无误的 Java 类。如果没有,也不用担心,因为本文附带了一个这样的类。
  19. 在新项目中新建一个 Web 服务。要打开 Web Service 向导,选择 File => New => Other/Web Services
    图 5. 找到 Web Service 向导
    找到 Web Service 向导
    找到 Web Service 向导
  20. 您需要一个自底向上的 Java bean Web 服务,并且应该将您的 Java 类指定为服务实现:
    图 6. 运行 Web Service 向导
    运行 Web Service 向导
    运行 Web Service 向导
  21. 单击 Next,接受后续屏幕上的所有默认值。您现在应该有一个 Web 服务,而且可能已经部署它(取决于您的 IBM Integration Developer 配置)。如果还没有部署,那么登录 WebSphere Application Server 并手动部署 EAR。
  22. 可以使用 IBM Integration Developer Web Services Explorer 测试这个 Web 服务。szInputBuffer 参数 (parameter) 的参数 (argument) 是州数据图所在的文件夹中的 sts.txt 文件。

将 WSDL 导入 WebSphere Cast Iron Studio

  1. 您在 IBM Integration Developer 中运行的 Web Service 向导创建了一个 WSDL 定义文件,可以将它置于项目中的 WebContent/WEB-INF/wsdl 下。可将这个文件导入至一个新的 WebSphere Cast Iron Studio 项目。
  2. 打开 WebSphere Cast Iron Studio 并创建一个新项目。从 Project 选项卡,右键单击 WSDLs 并选择 Add Document。浏览到您的 WSDL 文件并单击 OK
    图 7. 导入 WSDL
    导入 WSDL
    导入 WSDL

创建编排 (Orchestration)

创建一个编排(orchestration)来调用这个 Web 服务。您可以使用任何端点,但为简单起见,我们使用 HTTP 端点:

  1. 在 Activities 选项卡中,将一个 HTTP Receive Request 活动拖放到编排上。将编排上的一个 HTTP Send Response 活动拖放到 Receive Request 的右侧。
  2. 选择 Receive Request 并单击它,打开其配置。在检查列表中,选择 Pick Endpoint 并单击 New。选择一个端口号并单击 OK。同样,在检查列表中,选择 Configure,然后选择一个 URL,比如 /runthemap。保留消息类型 Text,然后选中 Requires a Reply
    图 8. 配置 Receive Request 活动
    配置 Recieve Request 活动
    配置 Recieve Request 活动
  3. 选择 Send Response 活动并单击它,打开其配置。注意,当您选择检查列表中的 Configure 时,Reply To 已经显示 Receive Request 且消息类型已变为 Text
    图 9. 配置 Send Response 活动
    配置 Send Response 活动
    配置 Send Response 活动
  4. 在 Activities 选项卡中,将 Web Services / Invoke Service 活动拖到编排上,放置到 Receive RequestSend Response 活动之间:
    图 10. 添加 Invoke Service 活动
    添加 Invoke Service 活动
    添加 Invoke Service 活动
  5. 选择它以打开其配置。在检查列表中,选择 Pick Endpoint 并单击 New。单击 WSDL Name 字段旁边的 Browse,浏览导入的 WSDL。单击 OK,然后再次单击 OK
  6. 现在只剩下的是通过 Cast Iron 映射变量了。从左侧开始,单击 Receive Request 活动,在检查列表中单击 Map Outputs。定位 body,选择它,然后单击 Copy。从输出参数中选择 Body,然后选择 Create
    图 11. 映射来自 Receive Request 活动的输出
    映射来自 Receive Request 活动的输出
    映射来自 Receive Request 活动的输出
  7. 选择 Invoke Service 活动,在其检查列表中选择 Map Inputs。单击 Select Inputs,选择 body。将 body 映射到 szInputBuffer:
    图 12. 将输入映射到 Invoke Service 活动
    将输入映射到 Invoke Service 活动
    将输入映射到 Invoke Service 活动
  8. 在检查列表中,选择 Map Outputs,然后单击 Select Outputs,选择 body。将 runMapReturn 映射到 body:
    图 13. 映射来自 Invoke Service 活动的输出
    映射来自 Invoke Service 活动的输出
    映射来自 Invoke Service 活动的输出
  9. 选择 Send Response 活动,打开其配置,从检查列表选择 Map Inputs。单击 Select Inputs 并选择 body。将输入 body 映射到输出 body:
    图 14. 将输入映射到 Send Response 活动
    将输入映射到 Send Response 活动
    将输入映射到 Send Response 活动
  10. 保存项目。

测试编排

  1. 要测试新编排,最简单的方法是在 Cast Iron Studio 中运行它。为此,单击 Verify 选项卡,然后单击绿色三角形启动编排:
    图 15. 验证编排
    验证编排
  2. 在 Tools 菜单中,打开 HTTP Post Test Utility 并指定您的 URL。如果您不知道自己的主机名,则可以在 Cast Iron 错误日志中找到它。端口和路径均为您在上面所指定的。单击 Show Response 并将 sts.txt 文件的目录(来自 Design Studio 中的州示例)粘贴到 Message to post 文本框。单击 Submit 将数据发送到编排。您应该能在响应窗口中看到来自数据图的输出:
    图 16. HTTP Post 实用工具
    HTTP Post 实用工具
    HTTP Post 实用工具

结束语

本文展示了如何创建一个通过调用 WebSphere TX Java API 来运行某个数据图的 Web 服务。您创建了一个 Cast Iron 编排,它使用 Invoke Service 活动来调用这个 Web 服务,进而运行一个数据图。尽管本文使用的数据图、Java API 和编排的示例都比较简单,但是您现在可以将这些概念扩展到在任何 Web 服务容器中托管的 WebSphere TX 数据图,以及从任意 Cast Iron 编排调用的任何 WebSphere TX 数据图。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=780503
ArticleTitle=从 WebSphere Cast Iron Cloud Integration 调用 WebSphere Transformation Extender 数据图
publish-date=12122011