Java 2 平台,企业版(J2EE)满足了用一种健壮的、安全的、事务性的方法在 Web 上提供现有的应用程序和业务流程的需要。J2EE 环境下已经建立了几个规范,最值得注意的是 Java 消息传递服务(JMS)和 Java 2 连接器体系结构(JCA),这些规范主要用来把 J2EE 应用程序与非 J2EE 环境集成在一起。另外,Web 服务技术最近在集成领域引起了许多关注,因为它们定义了一些通用的方法使应用程序可以跨异构编程语言和操作系统互相交互。这一点成为可能是因为 Web 服务使用 XML 作为它们的数据格式基础,将其用于描述特定的服务(即 Web 服务定义语言(Web Services Definition Language)或称 WSDL)或实际调用服务(即简单对象访问协议(Simple Object Access Protocol)或称 SOAP)。
在本文中,您将学到如何利用 J2EE 集成技术(特别是 JMS 和 JCA 标准)的优势,以及如何用 Web 服务技术增强这些技术,以便用更基于标准和互操作性更好的方式来实现企业应用程序的集成。我们将展示基于 Web 服务的公共接口如何帮助您把一个后端系统集成到 J2EE 环境中。这样,您将支持更高级别的自动化,并支持使用各种工具环境,从而使后端系统的互相连接更加容易,并且不需要太关心各个 API 和协议。
在阅读本文之前,您应该对 Web 服务和 J2EE 技术有基本的理解。如果您不熟悉这些主题,请参阅下面的参考资料部分获得一些有用的论文、文章和教程的链接。
J2EE、JMS 和 JCA 人们已经写了许多关于 J2EE 及 J2EE 所包含的 API 的文章,所以我们就不在这里重复所有那些信息了。但为了让读者都能够及时了解这篇文章中将讲些什么内容,我们来简要概述一下将作为我们的讨论的基础的一些技术。
上面所描述的应用程序间的通信被称为点对点通信(point-to-point communication),因为一个应用程序发送的消息只被另外一个应用程序接收。另一个描述多个应用程序如何在 JMS API 上进行交互的模型被称为发布-预定(publish-subscribe)模型。在这个模型中,一个应用程序将消息发布到某个被称为主题的目的地那里,该消息被任意已经预定了这个特定主题的应用程序接收。这样,同一条消息就有可能被多个客户机应用程序接收到。
JMS 规范只定义了一个编程接口来使用消息队列和主题,并把这个 API 的实现留给了所谓的消息提供者,每个与 J2EE 1.3 兼容的应用程序服务器都带有这种消息提供者。
关于 Web 服务的疑问 目前为止,我们已经讨论了 J2EE 世界中的两个主要接口,这两个接口使我们能够使用运行在 J2EE 应用程序服务器内的解决方案来集成非 J2EE 环境。一种方案解决了松散耦合的、基于 JMS 的异步集成,而另一种方案描述了耦合更紧密且同步的模型,这种方案使用的是 JCA。那么 Web 服务更适合哪一种呢?
通常 Web 服务描述的编程世界与我们所习惯的那种稍有不同,也就是在 Web 服务所描述的编程世界中,某些业务功能是用服务而不是用对象或组件表示的。服务用允许从任何编程语言和任何平台(通常是跨网络)调用该服务的方法来实现业务流程一部分。服务所提供的公共接口是用一种被称为 Web 服务描述语言(WSDL)的语言描述的,这种语言基于 XML 并定义了一些方法来用一种与编程语言无关的风格抽象描述操作以及这些操作的输入和输出消息。同样,Web 服务也提供了一种机制来集成业务功能,用这种机制集成时可以不考虑实现这些功能时所用的语言或特定 API。显然,这使得它们对于任何旨在集成异构后端应用程序的工作来说都非常有用。
Web 服务并没有解决它们自身的 EAI 问题。相反,它们考虑到了更好的自动化和更好的工具以及运行时支持,所以即便它们不是为这个目的而被构建也可以使应用程序的通信变得更容易。例如,有这样一些工具,它们可以构建用来访问 WSDL 文档所描述的服务的客户机端代理。WSDL 文档可以从现有代码中派生出来。由于 WSDL 是一个事实上的标准(经过了 W3C 的正式标准化,这是不久的将来所需要的),所以它得到了多个供应商实现的支持。同样,还存在各种运行时软件包,它们支持通过 SOAP 供应和消费 Web 服务,我们只是给出了一个协议作为示例。
Web 服务调用框架 目前为止,我们已经说过,如果想使用 J2EE、JMS 和 JCA 中提供的集成技术集成旧应用程序的话,我们可以把旧应用程序的接口描述为 WSDL 端口类型,并添加协议绑定(这些绑定附带关于如何访问它们的信息)。为了真正独立于所有的编程接口,我们需要这样一种机制,它可以解析和解释 WSDL 中包含的绑定信息,还可以为服务生成适当的运行时调用。例如,如果一个服务可以通过 JCA 资源适配器访问,我们就需要一种方法来自动利用该适配器提供的 CCI 接口 ? 而不必要求应用程序开发者知道如何使用 CCI。换句话说就是,我们希望能够只根据服务的接口来调用这个服务,而不是根据其实现或协议。
Web 服务调用框架(WSIF;请参阅参考资料获得相关链接)提供了一个接口,该接口允许对 Web 服务的调用独立于被用于与该服务实际进行通信的协议。它的编程接口严格基于 WSDL 端口类型定义的抽象服务接口。适当的请求消息是在运行时根据 WSDL 文档中的绑定信息构建的,这样它对应用程序开发者就是透明的。
结束语 现在的许多 IT 工厂都面临着集成运行在异构环境中的应用程序的挑战。Java 2 平台,企业版定义了各种允许集成这些应用程序的编程接口,然后这些应用程序就可以被用来构建新的、支持 Web 的、健壮的且安全的企业解决方案。这些接口中最突出的是 JMS 和 JCA。JMS 将异步且松散地耦合旧应用程序,而 JCA 允许通过同步且事务性的接口进行更紧密的耦合。
Web 服务技术为业务系统引入了面向服务的体系结构这个概念。业务功能是用基于 XML 的抽象定义表示的,就象 WSDL 文档中描述的那样。我们可以通过用 WSDL 定义用于 JMS 和 JCA 的特定的协议绑定来集成 J2EE 和 Web 服务技术;这样我们就可以用一种通用的、独立于协议的方式来定义后端接口。在运行时,“Web 服务调用框架”处理服务调用的生成而不考虑协议,这意味着应用程序开发者不必管理用来访问业务功能的多个编程接口。
看一下 Sun Microsystems 关于 Java 消息传递服务(JMS)和 Java 2 连接器体系结构(JCA)的页面。 如果想了解 W3C 的标准化工作进展情况,请通过该组织的 Web Services Architecture Working Group 了解最新动态。 Rahul Sharma、Beth Stearns、Tony Ng、Scott Dietzen 合著的 J2EE Connector Architecture and Enterprise Application Integration,(Addison Wesley,2001)是一篇关于 EAI 的优秀书籍。图 2 就是从这个文本中摘录的。 要查找更多关于 WSIF 的信息,请阅读“Applying the Web Services Invocation Framework”,Paul Fremantle(developerWorks,2002 年 6 月)。 学习更多关于 Apache Axis 的知识。
关于作者 Daniela Rudrof 是一位安全性操作(Security Operation)方面的 IT 专家,在 IBM 的 Control and Compliance GU Main 部门工作。她帮助确保 IBM 内以及外部客户的安全性标准。在开始从事目前的工作之前,她在 WebSphere Business Development Group 写了自己最后的论文,主要是关于 J2EE 技术和 Web 服务的。Daniela 在德国居住和生活。在闲暇时候,她喜欢出门,参与一些体育活动,包括英式足球、游泳和武术。您可以通过 Daniela.Rudrof@de.ibm.com 与 Daniela 联系。
Andre Tost 是 IBM WebSphere Business Development group 的一位解决方案设计师,他在这个部门帮助 IBM 的战略联盟伙伴把他们的应用程序与 WebSphere 集成在一起。他的工作重点是贯穿整个 WebSphere 产品系列的 Web 服务技术。在开始从事他目前的任务之前,他有十年的时间是在 IBM 软件开发工作中担任各种开发和体系结构方面的角色,最近是在从事 WebSphere Business Components 产品。他出生于德国,目前在美国明尼苏达州的罗切斯特居住和工作。在业余时间,他喜欢和他的家人在一起,只要有可能就去踢球或者看球。您可以通过 atost@us.ibm.com 与 Andre 联系。