博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 SIBus JMS 提供者
阅读量:2501 次
发布时间:2019-05-11

本文共 9929 字,大约阅读时间需要 33 分钟。

这个由两部分组成的文章系列介绍如何使用 IBM® WebSphere® Process Server 和 IBM WebSphere Enterprise Service Bus 中的 SOAP over Java™ Message Service (JMS)。了解如何设置和使用 IBM WebSphere Integration Developer 工具缺省配置的 SOAP over JMS,以及如何通过配置来支持使用 IBM WebSphere MQ JMS 提供者。这篇文章是本系列的第一部分,您将在本文中创建和调用一个使用 SOAP over JMS 的 Web 服务和一个端到端应用程序示例,并涵盖创建、构建、部署和测试应用程序的完整过程。同时涵盖点对点和发布/订阅消息的场景将指导您完成该过程。在本系列的第二篇文章中,您将重新配置一个 Web 服务,该 Web 服务使用 SOAP over JMS 协议来支持将 WebSphere MQ 用作 JMS 提供者,并允许通过 WebSphere MQ 队列传输 SOAP 消息。

通常,HTTP 不是用于传递 Web 服务消息的可靠协议。因此在需要更多可靠性的时候,您可能需要某种备选协议。人们正在编写越来越多的现有或新的 JMS 应用程序来处理 SOAP 消息的有效负载。WebSphere Process Server 和 WebSphere Enterprise Service Bus 都支持使用 JMS 来传递 Web 服务消息,以提供更高的可靠性和与使用 SOAP 协议的 JMS 应用程序集成的能力。

这种支持是作为 Web 服务绑定来提供的,您可以将该绑定应用于 WebSphere Process Server 和 WebSphere Enterprise Service Bus 模块导出(提供服务的点)和导入(调用服务的点)。您可以将该绑定配置为使用 HTTP 或 JMS 来传输 SOAP 消息。当将带有 Web 服务绑定的导出连接到某个组件时,运行时将自动处理 Web 服务协议和 SOAP 消息到该组件所需形式的转换。类似地,当将某个组件连接到带有 Web 服务绑定的导入时,运行时将自动处理 Web 服务的调用。

当选择 SOAP over JMS 作为 Web 服务绑定时,将使用 WebSphere Application Server 的缺省 JMS 提供者——也称为服务集成总线(Service Integration Bus,SIBus)JMS 提供者——来创建必要的资源以提供或调用 Web 服务。

WebSphere Integration Developer 使得集成开发人员无需编写复杂的代码即可容易地构建和调用使用 SOAP over JMS 的 Web 服务。Web 服务资源的 Java Naming and Directory Interface (JNDI) 名称由 WebSphere Integration Developer 使用 SIBus JMS 提供者来自动生成。

要按照本文所述进行操作,需要在计算机上安装以下软件:

  • WebSphere Integration Developer V6.02 或 V6.1
  • WebSphere Process Server V6.02 或 V6.1,或者 WebSphere Enterprise Service Bus V6.02 或 V6.1

本文的示例同时使用 6.02 和 6.1 版来进行了开发和测试。是从 WebSphere Integration Developer V6.1 中提供的。

JMS 应用程序通过两种方式之一进行交互:

  • 点对点:当存在两个直接交互的应用程序时,该消息模型称为点对点模型,并且所使用的 JMS 资源是一个队列
  • 发布/订阅:当存在一组产生信息的独立应用程序和另一组使用信息的独立应用程序时,该消息模型为发布/订阅模型,并且所使用的 JMS 资源是一个主题

示例同时演示了点对点和发布/订阅消息模型,因此您可以了解在 WebSphere Integration Developer 中构建基于 SOAP over JMS 的 Web 服务将需要哪些 JMS JNDI 资源。

自动生成的 JNDI 名称及其对应的资源用于点对点消息模型。要使用发布/订阅消息模型,必须同时在部署描述符和管理控制台中重新配置 JNDI 名称及其对应的资源。

此场景演示了由使用 SOAP over JMS Web 服务绑定的模块来提供并由使用相同绑定的另一个模块来调用的 Web 服务。在此例中,在消息发送方和接收方使用相同 JMS 目的地的场合使用了点对点消息模型。一个 JMS 目的地用于请求消息,一个用于响应消息,如图 1 所示。

使用 SOAP over JMS 绑定的点对点场景示例

图 1 显示了点对点消息模型中的 SOAP over JMS 使用示例。Web 服务应用程序 WSJMSBackEndService 包括一个带有 Web 服务 SOAP over JMS 绑定的导出和一个 Java 组件。该导出负责接收和发送 SOAP over JMS 消息时的 Web 服务处理,并通过其接口调用 Java 组件。该 Java 组件提供后端服务的实现;它不知道正在使用 SOAP over JMS 协议来调用它自己。

WSJMSMessageSender 应用程序具有一个带有 Web 服务 SOAP over JMS 绑定的导入,该导入通过将消息放在请求目的地和从应答目的地读取消息来调用 WSJMSBackEndService。请求消息在需要时使用 JMSReplyTo 标头字段来指示响应目的地。

首先您将创建一个带有共享接口的库,本文中的应用程序将使用该库。该库具有一个接口,名为 CustomerService,并带有三个操作。按照以下步骤操作,以在 WebSphere Integration Developer 中创建一个接口和一个业务对象(business object,BO):

  1. 要在 Business Integration 透视图中创建库,请选择 New > Library 以调出向导,然后输入 MyLibrary 作为名称。单击 Finish
  2. 要在 MyLibrary 中创建 BO,请选择 Data Type > New > Business Object。在字段中输入数据,如图 2 所示。
    具有五个字段的 BO 示例
  3. 要在 MyLibrary 中创建接口,请右键单击 Interface > New,并在向导中输入 CustomerService 作为名称。单击 Finish
  4. CustomerService 中创建三个操作,如图 3 所示(查看)。
    具有三个操作的接口示例

CustomerService 接口由示例应用程序中的服务组件体系结构(Service Component Architecture,SCA)组件使用。

现在按照下面的步骤操作,以在 WebSphere Integration Developer 中创建由 Java 组件实现的基于 SOAP over JMS 的 Web 服务:

  1. 通过单击 File > New Module 并在向导中输入 WSJMSBackEndService 作为模块名称,从而创建一个新模块。单击 Finish
  2. 通过将导出图标导出图标拖拽到组装关系图中,并使用缺省设置生成 Web 服务 SOAP over JMS 绑定,从而创建 SOAP over JMS 导出:
  3. 创建一个具有接口 CustomerService 的名为 HandleRequest 的 Java 组件。
  4. 连接 BackEndSOAPJMSExport 和 HandleRequest 组件,如图 4 所示。
    WS JMS 后端服务应用程序
  5. 右键单击 HandleRequest 组件以生成该实现。清单 1 显示了实现代码的示例。
    public DataObject getCustomerInfo(String id) {   ServiceManager serviceManager = ServiceManager.INSTANCE;   BOFactory bof = (BOFactory) serviceManager   .locateService("com/ibm/websphere/bo/BOFactory");   if( bof == null ) System.out.println("bof == null");   DataObject myData = bof.create("http://MyLibrary/data/ibm/com",                                  "CustomerInfo");   System.out.println("Creating a CustomerInfo object with soap/jms -------");   myData.setString("id", id);   myData.setString("firstName", "Lisa");   myData.setString("lastName", "Frank");   Date shipDate = new Date();   myData.setDate("shipDate", shipDate);   myData.setInt("quantity", 40);	       System.out.println("the created customerInfo is returned: ");   printCustomerInfo(myData);   return myData;}

    printCustomerInfo(myData) 是一个私有函数,此函数打印 myData 对象的值。

  6. 通过从组装关系图中选择 BackEndSOAPJMSExport 来查看导出绑定属性,如图 5 所示。
    Web 服务 SOAP over JMS 导出绑定属性

地址属性包括以下 JMS 资源:

  • 消息类型
  • 目的地
  • 连接工厂

当在 WebSphere Integration Developer 中生成 SOAP over JMS 绑定时,这些资源的值自动生成并存储在 MyLibrary 下的 BackEndSOAPJMSExport_CustimerServiceJmsPort.wsdl 文件中。目的地用于接收请求消息。连接工厂用于连接到 JMS 提供者(在此例中为 SIBus JMS 提供者)和访问目的地。

现在您可以保存并构建 WSJMSBackEndService 项目:

  1. WSJMSBackEndService 项目导出到 .ear 文件 WSJMSBackEndService.ear 中,并从管理控制台安装该文件。
  2. 从管理控制台安装 WSJMSBackEndService.ear 文件,并在每个步骤中采用缺省设置。您可能需要从管理控制台中手动启动所安装的应用程序。

当用于导出时,Web 服务 SOAP over JMS 绑定的实现使用消息驱动 Bean(message-driven bean,MDB)来接收请求消息。此 MDB 和所需的资源是在安装过程期间使用上面的 JMS 资源和 SIBus JMS 提供者来创建的。所创建的资源包括如图 6 所示的 JMS 激活规范(查看)和图 7 中同时用于请求和响应消息的连接工厂(查看)。

为导出 MDB 创建的激活规范
同时用于请求和响应连接工厂的 JNDI 资源

在 WebSphere Integration Developer 中,可以通过使用带有 Web 服务 SOAP over JMS 绑定的导入来创建 Web 服务客户端应用程序:

  1. 创建一个名为 WSJMSMessageSender 的新模块。
  2. 在 Business Integration 透视图中,导航到 MyLibrary 下的 BackEndSOAPJMSExport_CustimerServiceJmsPort
  3. 拖动 BackEndSOAPJMSExport _CustomerServiceJmsPort 并将其放在组装关系图中。
  4. 在所产生的对话框中,选择 Import with Web Service Binding 选项以创建 CustomerServiceImport1,如图 8 所示。
    创建 MessageSender 应用程序的示例
  5. 通过在组装关系图中选择 CustomerServiceImport1 来查看导入的绑定属性,如图 9 所示。
    SOAP over JMS 导入绑定属性

注意:此地址属性与所示的导出的 SOAP over JMS 绑定地址属性相同。

导入中的 destination 用于发送 SOAP over JMS 请求消息。导入中的 connectionFactory 用于连接到 JMS 提供者(在此例中为 SIBus JMS 提供者)和访问请求及应答目的地。

在部署该模块时,将不会为导入创建任何 JMS JNDI 资源,因为它使用所引用的导出资源。

可以使用测试模块功能来从 WebSphere Integration Developer 中测试 WSJMSMessageSender。这假设您已经在服务器配置中配置了 WebSphere Process Server 或 WebSphere Enterprise Service Bus 运行时:

  1. 从 WebSphere Integration Developer 启动服务器。
  2. WSJMSMessageSender 项目添加到服务器。
  3. 右键单击 WSJMSMessageSender 以测试该模块。
  4. 选择要测试的操作,例如 getCustomerInfo,并输入 ID 参数的值。
  5. 单击 Run 按钮以调用 WSJMSBackEndService 中的 getCustomerInfogetCustomerInfo 函数将被调用,如控制台窗口所示。CustomerInfo 对象被返回并显示在测试窗口中,如图 10 所示。
    测试模块和调用结果

还可以测试 WSJMSMessageSender 项目而不必首先安装它,因为如果还没有安装的话,测试过程将安装并启动 WSJMSMessageSender。

当使用发布/订阅模型时,可能有许多应用程序在接收请求消息。如果所调用的操作是请求/响应(也就是说,具有接口中定义的输出或错误消息),则所有那些应用程序都返回响应,并且需要附加的逻辑的选择或聚合那些响应。这就是 WebSphere Process Server 和 WebSphere Enterprise Service Bus 仅支持将单向操作用于发布/订阅消息模型的原因。

消息是在某个主题下针对一组感兴趣的订阅者进行发布的(参见图 11)。

发布/订阅消息模型的应用场景

图 11 显示了发布/订阅消息模型的应用场景。WSJMSPublisher 应用程序使用 greetingTopic 主题发布消息。拥有该主题的 JMS 提供者将消息发送给该主题的订阅者。在此例中,仅存在一个订阅者,即 WSJMSBackEndSubService 应用程序。下面几个部分将描述如何实现此场景。

  1. 在 MyLibrary 下创建一个名为 GreetingService 的新接口。
  2. 创建一个单向操作: void sayHello(string message);.

对于点对点消息模型,您可以使用自动生成的 SIBus JMS 资源。在发布/订阅消息模型中,您必须从管理控制台配置和创建发布/订阅 SIBus JMS 资源。

在安装应用程序之前,您需要在 Node 范围中创建一些 SIBus JMS 资源:

  1. 通过选择 JMS > Topic connection factory 来创建一个名为 greetingTopicCF 的主题连接工厂。
  2. 通过选择 JMS > Topics 来创建名为 greetingTopic 的主题。
  3. 通过选择 JMS > Activation specifications 来创建名为 topicJMSAS 的激活规范。

表 1 显示了在管理控制台中创建资源时需要定义的资源属性。

SIBus JMS 资源 主题连接工厂 主题 激活规范
名称 greetingTopicCF greetingTopic topicJMSAS
JNDI 名称 jms/greetingTopicCF jms/greetingTopic jms/topicJMSAS
总线名称 SCA.APPLICATION.hostNode01Cell

主题连接工厂用于发布者的 Web 服务 SOAP over JMS 导入绑定,使其创建到 SIBus JMS 提供者的连接以发布消息。总线名称的最后一部分 hostNode01Cell 随计算机而异。

对于主题,您还需要提供主题名称和主题空间,如图 12 所示。激活规范使用该主题。可以在这里使用缺省主题空间。

在管理控制台中配置主题

对于激活规范,您还需要指定目的地类型和目的地 JNDI 名称,如图 13 所示。

在管理控制台中配置激活规范

订阅者 是消息使用者,其接收特定主题下由消息发布者发布的消息。

在 WebSphere Process Server 和 WebSphere Enterprise Service Bus 中,包括带 Web 服务 SOAP over JMS 绑定的导出的模块是订阅者。作为导出绑定实现的一部分的 MDB 接收来自主题目的地的消息,并将消息转换为所连接到的组件所需要的形式。

具有带 Web 服务 SOAP over JMS 绑定的导入的模块是在该主题下发布消息的发布者。

创建模块 WSJMSBackEndSubService(此模块包括一个带 Web 服务 SOAP over JMS 绑定的导出和一个 Java 组件)的步骤与点对点模型中描述的步骤相同。图 14 显示了该模块。

配置导出 MDB 属性

创建此项目之后,您需要在 WebSphere Integration Developer 中构建它。构建过程将创建一些构件,需要修改这些构件才能使用发布/订阅消息模型。这包括模块的部署描述符文件 ejb-jar.xml 中的一些 J2EE 构件,您可以在 J2EE 项目中找到该文件。缺省情况下:

  • 消息目的地类型为 javax.jms.Queue。
  • 激活规范目的地类行为 javax.jms.Queue。

您必须按图 5 所示对它们进行更改:

  1. 使用部署描述符编辑器打开 EJB 项目中的 ejb-jar.xml 文件。确保仅保存此文件而不再次构建项目。这是因为构建基于 SOAP over JMS 的 Web 服务项目会生成缺省的 JMS 构件,这些构件与消息队列相关。如果在部署描述符中做出更改之后构建项目,则构件将被缺省构件覆盖。
  2. 图 15 表明您需要在 Activation Configuration 中更改 WebServicesJMSRouter_BackEndSOAPJMSSubExport_GreetingServiceJmsPort 的消息目的地类型和 destinationType
    订阅者 Web 服务应用程序示例
  3. 您还需要通过修改文件 BackEndSOAPJMSSubExport_GreetingServiceJmsPort.wsdl 来更改 Web 服务 SOAP over JMS 绑定地址属性。为此,您可以选择 MyLibrary > Web Service Ports 并将
    jms:/queue?destination=jms/BackEndSOAPJMSSubExport&connectionFactory=jms/
    BackEndSOAPJMSSubExportQCF&targetService=BackEndSOAPJMSSubExport_GreetingServiceJmsPort
    更改为:
    jms:/topic?destination=jms/BackEndSOAPJMSSubExport&connectionFactory=jms/
    BackEndSOAPJMSSubExportQCF&targetService=BackEndSOAPJMSSubExport_GreetingServiceJmsPort
  4. 通过单击 File > Export > Business Integration > Integration Module 将项目导出为 EAR 文件。然后单击 Next 以选择 WSJMSBackEndSubService,并提供一个文件夹以保存 WSJMSBackEndSubService.ear 文件。
  5. 从管理控制台安装 WSJMSBackEndSubService.ear 文件,并将 Message Driven Bean listener bindings 修改为指向已定义的激活规范 JNDI,如图 16 所示(查看)。
    修改后的导出 MDB 激活规范

包含带 Web 服务 SOAP over JMS 绑定的导入的 Web 服务模块可以在 Greeting 主题下发布消息;该消息由 WSJMSBackEndSubService 使用。此模块的示例名为 WSJMSPublisher。

  1. 创建名为 WSJMSPublisher 的新模块。
  2. 通过将 BackEndSOAPJMSSubExport_GreetingServiceJmsPort.wsdl 文件从 MyLibrary 拖放到组装关系图中,从而创建带 Web 服务 SOAP over JMS 绑定的导入。选择 Import with Web Service Binding 选项以创建该导入。
  3. 将导入组件的绑定属性从
    jms:/topic?destination=jms/BackEndSOAPJMSSubExport&connectionFactory=jms/
    BackEndSOAPJMSSubExportQCF&targetService=BackEndSOAPJMSSubExport_GreetingServiceJmsPort
    更改为:
    jms:/topic?destination=jms/greetingTopic&connectionFactory=jms/
    greetingTopicCF
    &targetService=BackEndSOAPJMSSubExport_GreetingServiceJmsPort
  4. 保存项目并将其从 WebSphere Integration Developer 部署到 WebSphere Process Server 服务器。

现在您可以使用 WebSphere Integration Developer 中的测试客户端来测试 WSJMSPublisher;图 17 显示了结果(查看)。

发布/订阅模型中的测试结果 

本文演示了如何在 WebSphere Integration Developer 中构建和调用基于 SOAP over JMS 的 Web 服务,以及如何在 WebSphere Process Server 或 WebSphere Enterprise Service Bus 中安装和运行那些 Web 服务。Web 服务 SOAP over JMS 导出绑定用于创建 Web 服务提供者,Web 服务 SOAP over JMS 导入绑定用于创建 Web 服务客户端应用程序。

本文中的示例同时演示了 WebSphere Process Server 和 WebSphere Enterprise Service Bus 中的 Web 服务功能所支持的点对点和发布/订阅消息模型。WebSphere Integration Developer 工具提供了允许简单和高效地构建 Web 服务的 GUI。

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

转载于:http://blog.itpub.net/14789789/viewspace-406629/

你可能感兴趣的文章