IBM® WebSphere® Message Broker(以下简称 Message Broker)被广泛用作一种企业服务总线 (ESB),充当着一个灵活的连接基础架构,用于集成应用程序、服务和系统。Message Broker 提供了一流的基础架构,任何企业都可使用该基础架构匹配和路由服务之间的通信,在各种传输协议之间转换,在不同数据格式之间转换,并识别和分发业务事件。
Worklight 为移动设备提供了一个高级的移动应用程序开发和部署平台。它帮助各种规模的组织,使用强大而又灵活的移动 IDE、下一代移动中间件、端到端安全性以及集成的管理和分析功能来开发、运行和管理 HTML5、混合和原生应用程序。Worklight 为企业提供了一个跨平台的移动应用程序平台,因此,对于许多移动操作系统,只需编写极少量的代码。Worklight 适配器是服务器端的组件,方便了通过 Cast Iron、HTTP、JMS 和 SQL 适配器与各种后端系统的连接。
本文展示如何在 IBM Worklight 中开发混合移动应用程序,然后将它们与 Message Broker 集成,解决任何企业应用程序连接性需求。该移动应用程序使用 Worklight 服务器调用一个部署在 Message Broker 之上的企业服务。本文包含以下小节:
使用 Message Broker 开发一个消息流 开发 Worklight 适配器 开发移动 Worklight 应用程序 部署移动 Worklight 应用程序
我们将使用 JK Financials Bill Payment 示例应用程序来演示该集成。该应用程序包含以下组件:
一个后端账单支付流程,实现为一个 Message Broker 消息流。 一个 Worklight HTTP 适配器,它调用包含账单支付细节的消息流。使用该 HTTP 适配器
是因为它提供了与 HTTP 应用程序的连接性,此场景需要同步的请求/回复。在异步场景中,可使用 JMS 适配器。 一个混合 Worklight 应用程序,用于从用户
获取账单支付细节供处理。
1. 使用 Message Broker 开发一个消息流
首先使用 Message Broker Toolkit 开发一个消息流,以执行移动应用程序的支付处理:
打开 Message Broker Toolkit 并创建一个包含以下节点的消息流项目:HTTPInput Node => Compute Node => Java Compute Node => HTTPReply Node。 将计算节点重命名为 ValidatePaymentDueDate,将 Java 计算节点重命名为 Convert XML to JSON。 将 HTTP 输入节点 URL 设置为 /test,如下所示:
图 1
对于 Message domain,请选择 XMLNSC,对于 Input message,请选择 XML。计算节点客使用下面的 ESQL 代码 ValidatePaymentDueDate 来验证账单到期日。账单支付在到期日之前有效。在这之后,验证将失败,将无法处理账单支付:CREATE COMPUTE MODULE DevWorkSampleApp_ValidatePaymentDueDate CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN -- CALL CopyMessageHeaders(); -- CALL CopyEntireMessage(); IF (CAST(InputRoot.XMLNSC.PaymentDetails.BillDueDate AS DATE) >= CURRENT_DATE) THEN SET OutputRoot.XMLNSC.Message.
Status = 'Your Payment is validated successfully and transaction is processed with bill amount : ' || InputRoot.XMLNSC.PaymentDetails.BillAmount; ELSE SET OutputRoot.XMLNSC.Message.Status = 'Your Payment validation failed, the due date is expired.' || InputRoot.XMLNSC.PaymentDetails.BillAmount; END IF; RETURN TRUE; END; CREATE PROCEDURE CopyMessageHeaders() BEGIN DECLARE I INTEGER 1; DECLARE J INTEGER; SET J = CARDINALITY(InputRoot.*[]); WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I = I + 1; END WHILE; END; CREATE PROCEDURE CopyEntireMessage() BEGIN SET OutputRoot = InputRoot; END;END MODULE; Java 计算节点 Convert XML to JSON 中的以下 Java 代码将 XML 消息结构转换为 JSON 格式,进而返回给调用应用程序。有关的完整代码,请参阅文件 WorklightFlow_XMLToJSON.java 和
Utility.java。public void evaluate(MbMessageAssembly inAssembly) throws MbException { MbOutputTerminal out = getOutputTerminal("out"); MbMessage inMessage = inAssembly.getMessage(); // create new message MbMessage outMessage = new MbMessage(); MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage); try { copyMessageHeaders(inMessage, outMessage); MbElement jsonDataElement = outMessage.getRootElement().createElementAsLastChild (MbJSON.PARSER_NAME).createElementAsFirstChild(MbElement.TYPE_NAME); jsonDataElement.setName(MbJSON.DATA_ELEMENT_NAME); MbElement xmlnscElement = inMessage.getRootElement().getLastChild(); if(null==xmlnscElement ){ MbUserException mbue = new MbUserException(this, "evaluate()", "", "", "No body", null); throw mbue; } 最后,连接 HTTPReply 节点并将 DevWorkSampleApp.msgflow 部署在执行组上。