在 WebSphere Process Server 中使用外部总线实现跨管理单元的 JMS 消息传递(一)

引言

IBM WebSphere Process Server(简称 WPS)是下一代业务流程集成服务器,它从公认的业务集成概念、应用程序服务器技术和最新开放式标准发展而来。WPS 支持服务组件架构 SCA(Service Component Architecture)。作为实现 SOA 统一的、基于标准的编程模型,其中,服务组件(Service Component)代表了底层 IT 基础设施的关键业务抽象。服务组件并不是孤立存在的,需要与其它 SCA 或非 SCA 系统交互,WPS 支持通过多种绑定方式进行业务的集成与交互,其中 JMS 是重要的异步调用绑定方式之一。
服务组件可以作为 JMS 服务端(Service)接收外部 JMS 客户端(Client)发送的消息;也可以作为 JMS 客户端(Client),向外部 JMS 服务端(Service)发送消息。服务组件接收 JMS 消息通过 JMS 绑定的 Export (Export with JMS Binding)机制实现,发送 JMS 消息通过 JMS 绑定的 Import (Import with JMS Binding)机制实现。Export/Import 与外部的 JMS Client/Service 通过 JMS 目标(Destination)交互。
WPS 运行时的基础结构是 WebSphere Application Server (简称 WAS),WAS 的 JMS 提供程序为 WPS 提供了底层的 JMS 支持。在 WPS V6.0.2 中,主要可以使用四种 JMS 提供程序,本文将对如何使用缺省消息传递实现在同一管理单元及跨管理单元的应用进行说明。
本文将结合一个实际例子,来阐述使用 WebSphere Integration Developer (简称 WID)开发 JMS 应用程序并通过配置 WPS 外部总线实现跨管理单元的消息传递。本文的开发工具采用 WID V6.0.2,部署环境采用 WID 内嵌的 WPS V6.0.2。对于 WID 和 WPS 的详细使用方法,读者可以参见本文的参考资料。







服务集成总线

服务集成总线支持使用基于消息和面向服务体系结构的应用程序。总线是一组作为总线成员的一个或多个相互连接的服务器或服务器集群。应用程序在其中一个与其总线成员相关联的消息传递引擎上连接到总线。
缺省消息传递提供程序使用服务集成总线(SIBus)作为 JMS 应用程序的消息传递系统,因此我们也可以称服务集成总线为消息传递总线。 IBM WPS V6.0.2 使用了 WAS V6.0.2 提供的基于服务集成总线(SIBus)的应用程序消息传递平台。消息传递平台是符合 JMS 的信息传递提供程序,通过 SIBus 连接到应用程序,并向每个应用程序提供对消息传递服务器的本地进程内访问。







为什么要使用外部总线

总线必须包含在单个单元中,即,总线不能跨多个单元。但是,一个单元可以包含多个总线。可以将一个单元中的总线连接到一起,也可以通过外部总线将不同单元中的总线连接到一起。服务集成总线上定义外部总线实际上是在体系结构级定义两个总线之间的链接。如果一个总线是另一总线的外部总线,那么需要在两个方向上都创建外部总线链路,这与总线的所在位置无关。通过 WID 开发出的使用 JMS 绑定的应用程序被部署到同一个 WPS 管理单元时,是可以进行消息传递的(我们将在下文中首先实现在同一管理单元的 JMS 消息传递)。他们可以通过 JNDI 的方式获得相应的 JMS 资源,如 JMS 队列、JMS 连接工厂。但是,当用户试图将 JMS 客户端(Client)和 JMS 服务端(Service)应用程序分别部署到不同的管理单元时,只能通过配置外部总线的方法对位于不同管理单元中的服务集成总线(SIBus)进行互联,从而达到消息的正常传递。(详细实现见下文)







利用 WID 开发运行于同一管理单元的 JMS 客户端和服务端

这里我们将首先利用 WID 开发运行于同一管理单元的 JMS 客户端(Client)和 JMS 服务端(Service),从而与部署于两个独立管理单元的情况作对照。

创建 Library,定义公共接口(interface)

1. 在 WID 工作台中,打开业务集成透视图。切换到 Business Integration 视图。

2. 在 Business Integration 视图内单击鼠标右键,然后选择 New > Library。 (图1)


图1. 创建新 Library

3. New Library 向导出现。将该 Library 命名为 SharedLibrary。(图2)


图2. 创建新 Library

4. 点击 Finish 按钮。

5. 展开 SharedLibrary。

6. 右键单击 Interfaces,然后选择 New > Interface。(图3)


图3. 创建新 Interface

7. New Interface 向导出现,命名为 interface1。 (图4)


图4. 创建新 Interface

8. 点击 Finish 按钮。

9. 单击 Add Request Response Operation 图标。(图5)


图5. 创建新 Operation

10. 创建一个名为 operation1 的操作,具有一个 String 类型的输入和一个 String 类型的输出。(图6)


图6. 创建新 Operation

11. 保存并关闭接口编辑器。

创建 JMS 服务端(Service)

1. 在 Business Integration 视图内单击鼠标右键,然后选择 New > Module。(图7)


图7. 创建新 Module

2. New Module 向导应该出现。将该模块命名为 JMSExportApplication。(图8)


图8. 创建新 Module

3. 点击 Next,选取 SharedLibrary 作为 Required Library。(图9)


图9. 创建新 Module

4. 点击 Finish 按钮。

5. 展开 JMSExportApplication > Business Logic,然后选择 New > Business Process。(图10)


图10. 创建新 Business Processe

6. New Business Process 向导应该出现,将该 Business Process 命名为 Process1。(图11)


图11. 创建新 Business Process

7. 点击 Next 按钮,选择使用一个已经存在的 Interface。(图12)


图12. 创建新 Business Process

8. 点击 Browse 按钮,选取 interface1,点击 OK 按钮。(图13)


图13. 创建新 Business Process

9. 选取 operation1 作为操作,点击 Finish 按钮。(图14)


图14. 创建新 Business Process

10. 打开 business process 编辑器,点击 Snippet 图标。(图15)


图15. 为 Business Process 创建一个 Snippet

11. 点击 Receive 和 Reply 之间的连线,Snippet activity 被加入了。(图16)


图16. 为 Business Process 创建一个 Snippet

12. 点击 Snippet activity,在 properties view, 点击 Details tab,选择 Java 作为实现类型。(图17)


图17. 为 Business Process 创建一个 Snippet

13. 在文本区内输入如下代码, 并保存。(图18)


图18. 为 Business Process 创建一个 Snippet

14. 双击 Assembly Diagram (JMSExportApplication > Assembly Diagram)。

15. 将 Process1 拖到 Assembly Diagram 编辑器中。(图19)


图19. 将 Business Process (Process1) 拖至 Assembly Diagram

16. 点击 Process1 模块选择 Generate Export > Messaging Binding > JMS Binding。(图20)


图20. 创建 JMS Binding

17. Configure JMS Export Service 窗口弹出,接受默认值,并点击OK按钮。根据默认值,在部署服务端(Service)应用程序时,服务器将自动创建 JNDI 名为 JMSExportApplication/Process1Export_AS 的 JMS 激活规范,JNDI 名为 JMSExportApplication/Process1Export_RECEIVE_D 的接收目标,JNDI 名为 JMSExportApplication/Process1Export_SEND_D 的发送目标。(图21)


图21. 创建 JMS Binding

18. 保存,服务端(Service)的应用程序创建完毕。(图22)


图22. 创建完成 JMS Binding

创建 JMS 客户端 (Client)

1. 在 Business Integration 视图内单击鼠标右键,然后选择 New > Module。(图23)


图23. 创建新 Module

2. New Module 向导应该出现,将该模块命名为 JMSImportApplication。(图24)


图24. 创建新 Module

3. 点击 Next,选取 SharedLibrary 作为 Required Library。(图25)


图25. 创建新 Module

4. 点击 Finish 按钮。

5. 在 Assembly Diagram 编辑页面中点击 Add > Import, 默认的 import 的名字为 import1。(图26)


图26. 创建 Import

6. 点击 Import1 模块, 选择 Add Interface。(图27)


图27. 为 Import 添加 Interface

7. 选择 interface1, 点击 OK 按钮。(图28)


图28. 为 Import 添加 Interface

8. 在 import1 上点击 Generate Binding > Messaging Binding > JMS Binding。(图29)


图29. 为 Import 创建 JMS Binding

9. 选择 Use pre-configurated messaging provider resources。输入 JMS 连接工厂的 JNDI 为 JMSImportApplication/Import1_CF, 发送目标的 JNDI 名为 JMSExportApplication/Process1Export_RECEIVE_D, 接收目标的 JNDI 名为 JMSExportApplication/ Process1Export _SEND_D。请注意我们需要手工在服务器上创建 JNDI 为 JMSImportApplication/Import1_CF 的 JMS 连接工厂。(图30)


图30. 为 Import 创建 JMS Binding

10. 点击 OK 按钮,并保存。JMS 客户端(Client)应用程序创建完毕。(图31)


图31. 为 Import 创建 JMS Binding 完成

启动 WPS 服务器,配置 JMS 资源

1.服务器启动后进入管理控制台。(图32)


图32. 启动 WPS 管理控制台

2.在管理控制台中点击 资源 > JMS 提供程序 > JMS 队列连接工厂 。(图33)


图33. JMS 队列连接工厂页面

3. 点击新建按钮。填入名称 Import1_CF, JNDI 名称 JMSImportApplication/Import1_CF,总线名选为 SCA.APPLICATION.widCell.Bus。(图34)


图34. 创建 JMS 队列连接工厂

4. 点击确定按钮。

5. 点击保存。(图35)


图35. 保存新创建的 JMS 队列连接工厂

6. JMS 资源创建完毕。其它的 JMS 资源将在部署应用时自动创建。

启动 WPS 服务器,部署 JMS 服务端和客户端应用程序进行测试

1. 点击添加删除应用程序。(图36)


图36. 点击添加删除应用程序

2. 点击 Add All 按钮,点击 Finish 按钮完成部署。(图37)


图37. 添加应用程序

3. 进入管理控制台 应用程序 > 企业应用程序,可以看到 JMSExportApplicationApp 和 JMSImportApplicationApp 均已启动。(图38)


图38. 企业应用程序页面

4. 展开 JMSImportApplication module, click Assembly Diagram 进入 Assembly Diagram 视图,点击模块 Import1 > Test Component。(图39)


图39. 点击 Test Component

5. 在 Test Component 页面中填入 Value 值 gaoming, 点击 Continue 按钮。(图40)


图40. 填入测试数据

6. 可以看到返回值为 Hello gaoming。 这正是我们期待的结果。(图41)


图41. 返回结果

7. 查看 SystemOut.log,有如下输出:

>>>> Input1 ---&gtgaoming

>>>> Output1 ---&gtHello gaoming

由此可见在同一个管理单元中,JMS 客户端(Client)和服务端(Service)是可以通过缺省的消息传递提供程序传递 JMS 消息的。







小结

本文第一部分介绍了如何开发部署运行于同一管理单元的 JMS 客户端(Client)和 JMS 服务端(Service)应用程序进行 JMS 消息通信。由于篇幅有限,我们将在第二部分向您介绍如何开发部署跨管理单元的 JMS 客户端(Client)和JMS 服务端(Service)应用程序,使读者通过对比理解外部服务总线的使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值