📄 用 web 服务和 j2ee 集成企业应用程序.htm
字号:
<TD width=160 bgColor=#000000 height=1><IMG height=1
alt=""
src="E:\thread\threadcollection\0907\用 Web 服务和 J2EE 集成企业应用程序.files\c(1).gif"
width=160></TD></TR>
<TR>
<TD align=middle
background="用 Web 服务和 J2EE 集成企业应用程序.files/bg-gold.gif"
height=5><A class=nav
href="http://www-900.ibm.com/developerworks/cn/xml/"><B>xml
和 Web 服务专区中还有:</B></A></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1
alt=""
src="E:\thread\threadcollection\0907\用 Web 服务和 J2EE 集成企业应用程序.files\c(1).gif"
width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD><A
href="http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/xml-onlinecourse-bytitle?OpenView&Count=500iew&Count=500">教学</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt=""
src="E:\thread\threadcollection\0907\用 Web 服务和 J2EE 集成企业应用程序.files\c(1).gif"
width=160></TD></TR>
<TR>
<TD><A
href="http://www-900.ibm.com/developerWorks/cn/cntools.nsf/dw/xml-dtds-bysite?OpenDocument&count=100">工具与产品</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt=""
src="E:\thread\threadcollection\0907\用 Web 服务和 J2EE 集成企业应用程序.files\c(1).gif"
width=160></TD></TR>
<TR>
<TD><A
href="http://www-900.ibm.com/developerWorks/cn/cnpapers.nsf/xml-papers-bynewest?OpenView&count=500">所有的文章</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD height=1><IMG height=5 alt=""
src="E:\thread\threadcollection\0907\用 Web 服务和 J2EE 集成企业应用程序.files\c(1).gif"
width=160></TD></TR></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=150 bgColor=#000000 colSpan=2 height=2><IMG height=2
alt=""
src="E:\thread\threadcollection\0907\用 Web 服务和 J2EE 集成企业应用程序.files\c(1).gif"
width=160></TD></TR>
<TR>
<TD width=150 bgColor=#ffffff colSpan=2 height=2><IMG height=2
alt=""
src="E:\thread\threadcollection\0907\用 Web 服务和 J2EE 集成企业应用程序.files\c(1).gif"
width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><SPAN
class=atitle2>把这些企业技术结合起来使 EAI 更容易进行</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD></TD></TR></TBODY></TABLE>
<P><A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#author1">Daniela
Rudrof</A>(<A
href="mailto:Daniela.Rudrof@de.ibm.com">Daniela.Rudrof@de.ibm.com</A>),IT
专家,IBM Security Operations<BR><A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#author2">Andre
Tost</A>(<A
href="mailto:atost@us.ibm.com">atost@us.ibm.com</A>),解决方案设计师,IBM WebSphere
Business Development Group<BR><BR>2002 年 11 月</P>
<BLOCKQUOTE>一段时间以来,IT 员工已经能够使用 Java 2 平台,企业版(Java 2 Platform, Enterprise
Edition(J2EE))的元素集成后端系统了。最近出现的 Web
服务技术已经使我们能够用一些以前想不到的新方法来实现类似的目的。在本文中,Andre Tost 和 Daniela Rudrof
向您说明了如何结合 J2EE 和 Web 服务使企业应用程序集成(enterprise application
integration(EAI))变得更轻松。您还将看到如何把 Java 消息传递服务(Java Messaging Service)和
Java 2 连接器体系结构(Java 2 Connector Architecture)与 Web
服务技术一起使用使集成过程达到一个新的抽象层次。</BLOCKQUOTE>
<P>目前,开发者要在应用程序集成方面花费很多精力和资源。这包括把新应用程序与先前已有的应用程序集成在一起以及使现有的应用程序互相通信 —
同时所有这些工作都尽量使这些应用程序的更改达到最少。通常情况下,这类集成被称为<I>企业应用程序集成</I>或 EAI。目前市场上有几种产品可以使
EAI
的过程更轻松。大多数情况下,企业是通过构建一个中间件基础架构和几个适配器(这些适配器允许不同的后端应用程序插入到一个某种类型的公共协议,从而互相交换数据)来实现集成。</P>
<P>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)。</P>
<P>在本文中,您将学到如何利用 J2EE 集成技术(特别是 JMS 和 JCA 标准)的优势,以及如何用 Web
服务技术增强这些技术,以便用更基于标准和互操作性更好的方式来实现企业应用程序的集成。我们将展示基于 Web
服务的公共接口如何帮助您把一个后端系统集成到 J2EE
环境中。这样,您将支持更高级别的自动化,并支持使用各种工具环境,从而使后端系统的互相连接更加容易,并且不需要太关心各个 API 和协议。</P>
<P>在阅读本文之前,您应该对 Web 服务和 J2EE 技术有基本的理解。如果您不熟悉这些主题,请参阅下面的<A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#resources">参考资料</A>部分获得一些有用的论文、文章和教程的链接。</P>
<P><A name=1><SPAN class=atitle2>J2EE、JMS 和 JCA</SPAN></A><BR>人们已经写了许多关于
J2EE 及 J2EE 所包含的 API
的文章,所以我们就不在这里重复所有那些信息了。但为了让读者都能够及时了解这篇文章中将讲些什么内容,我们来简要概述一下将作为我们的讨论的基础的一些技术。</P>
<P><A name=1.1><SPAN class=atitle3>Java 消息传递服务</SPAN></A><BR>Java
消息传递服务(JMS;请参阅<A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#resources">参考资料</A>以了解更多相关信息)定义了一个可以用来在应用程序间交换消息的公共
API。它允许应用程序间的<I>异步</I>通信,在这种通信中一个应用程序向消息队列发送一条消息并随后继续自己的正常处理而不是等待该消息被另一个应用程序接收。任何负责接收的应用程序都从该队列检索消息,解释该消息并适当地处理它。两方的应用程序都可能在同一时间或不同时间,在相同的或不同的机器上运行。</P>
<P>上面所描述的应用程序间的通信被称为<I>点对点通信(point-to-point
communication)</I>,因为一个应用程序发送的消息只被另外一个应用程序接收。另一个描述多个应用程序如何在 JMS API
上进行交互的模型被称为<I>发布-预定(publish-subscribe)</I>模型。在这个模型中,一个应用程序将消息发布到某个被称为<I>主题</I>的目的地那里,该消息被任意已经预定了这个特定主题的应用程序接收。这样,同一条消息就有可能被多个客户机应用程序接收到。</P>
<P>JMS 规范只定义了一个编程接口来使用消息队列和主题,并把这个 API 的实现留给了所谓的<I>消息提供者</I>,每个与 J2EE 1.3
兼容的应用程序服务器都带有这种消息提供者。</P>
<P>在使用 JMS 集成后端应用程序时,我们经常说这些应用程序是<I>松散耦合的</I>。这描述了这样一条消息 —
它在一个事务中被创建、发送,然后从队列中被取出,并在一个独立的事务中被处理。把消息的创建者与处理者分开在一定程度上是间接的。只要消息交换在进行,JMS
就是<I>事务性的</I>,但交换和处理发生在相互分开的事务中。换句话说就是,JMS
提供者可以向消息的发送方保证将消息发送到目的地(一个队列或主题),并且是一次性发送。但在消息的处理过程中是否发生了错误就完全是另一回事了。</P>
<P><A name=1.2><SPAN class=atitle3>Java 2 连接器体系结构</SPAN></A><BR>Java 2
连接器体系结构(JCA;请参阅<A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#resources">参考资料</A>了解更多的相关信息)定义了一种用来使
J2EE 应用程序与非 J2EE 环境(通常情况下,是<I>企业信息系统(enterprise information system)</I>,或称
EIS)用一种安全的、事务性的方式进行通信的方法。利用 JCA API 的解决方案比基于 JMS 的解决方案与后端耦合得更紧;更确切地说是 JCA
规范可以在同一次消息交换或同一个事务中把消息的发送和处理结合起来。</P>
<P>规范定义了应用程序和 EIS
间各种级别的接口。规范基本上是描述如何在应用程序服务器和后端应用程序间部署所谓的资源适配器。资源适配器存在于应用程序服务器的地址空间内,并实现了允许应用程序服务器和
EIS 间交互的编程接口。 </P>
<P>JCA 规范中定义了两种级别的编程接口。一种级别被称为<I>公共客户机接口(common client
interface</I>(CCI)),任何 J2EE 组件都可以用这种接口与 EIS
进行交互。它的使用是可选的,这意味着资源适配器不一定非得实现它。EIS
供应商可以自由使用它自己的接口。这一点很有意义,特别是当这个接口已经被用一种更早的集成方法实现过的时候,就更有意义。例如,一个数据库可能已经有了连接到数据库并处理
SQL 语句的包装器类。</P>
<P>JCA 定义的其他接口是一个<I>系统编程接口(system programming
interface</I>(SPI))集合,它们只被应用程序服务器内部使用。SPI 分为三种类别,用来解决下面几个问题:</P>
<UL>
<LI><B>安全性(Security)</B>接口允许应用程序服务器和资源适配器处理在 EIS 上的登录 —
例如,通过隐式方法把用户标识和密码组合发送到代表客户机的后端。
<LI><B>连接池(Connection pooling)</B>接口确保与 EIS 进行通信所需的任何资源都在许多客户机间被共享,并被合用。
<LI><B>事务处理(Transaction handling)</B>接口负责管理跨支持两阶段提交协议的各种后端的分布式事务。
</LI></UL>
<P><A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#figure1">图
1</A> 显示了 JCA 规范定义的各种类型的接口</P>
<P><A name=figure1><B>图 1. Java 2 连接器体系结构概览</B></A><BR><IMG height=242
alt="Java 2 连接器体系结构概览" src="用 Web 服务和 J2EE 集成企业应用程序.files/fig1.gif"
width=520> </P>
<P>JCA 的许多方面本身就值得进行更深入、更详细的研究,但我们将把这个任务留给其他的文章和论文。对于我们来说,要记住的关键一点是,与基于使用
JMS 进行消息交换的系统相比,使用 JCA 进行的集成耦合得更紧密。EIS 进行的处理是同步的,因此可以成为 J2EE
应用程序服务器管理的事务的一部分。因此,被 J2EE 应用程序跨多个后端应用程序运行的业务流程可以是事务性的 —
这些应用程序所执行的步骤要么全部被提交,要么一步也不提交。</P>
<P><A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#figure2">图
2</A>(这张图是从 <I>J2EE Connector Architecture and Enterprise Application
Integration</I> 一书摘录的 — 请参阅<A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#resources">参考资料</A>获得该书的链接)向您展示如何使用
JMS 和 JCA 把企业信息系统连接到 J2EE 环境。</P>
<P><A name=figure2><B>图 2. 使用 JMS 和 JCA 把 J2EE 和非 J2EE
系统连接起来</B></A><BR><IMG height=378
alt="图 2. 使用 JMS 和 JCA 把 J2EE 和非 J2EE 系统连接起来"
src="用 Web 服务和 J2EE 集成企业应用程序.files/fig2.gif" width=532> </P>
<P><A name=2><SPAN class=atitle2>关于 Web 服务的疑问</SPAN></A><BR>目前为止,我们已经讨论了
J2EE 世界中的两个主要接口,这两个接口使我们能够使用运行在 J2EE 应用程序服务器内的解决方案来集成非 J2EE
环境。一种方案解决了松散耦合的、基于 JMS 的异步集成,而另一种方案描述了耦合更紧密且同步的模型,这种方案使用的是 JCA。那么 Web
服务更适合哪一种呢?</P>
<P>通常 Web 服务描述的编程世界与我们所习惯的那种稍有不同,也就是在 Web
服务所描述的编程世界中,某些业务功能是用<I>服务</I>而不是用对象或组件表示的。服务用允许从任何编程语言和任何平台(通常是跨网络)调用该服务的方法来实现业务流程一部分。服务所提供的公共接口是用一种被称为
Web 服务描述语言(WSDL)的语言描述的,这种语言基于 XML
并定义了一些方法来用一种与编程语言无关的风格抽象描述操作以及这些操作的输入和输出消息。同样,Web
服务也提供了一种机制来集成业务功能,用这种机制集成时可以不考虑实现这些功能时所用的语言或特定
API。显然,这使得它们对于任何旨在集成异构后端应用程序的工作来说都非常有用。</P>
<P>Web 服务并没有解决它们自身的 EAI
问题。相反,它们考虑到了更好的自动化和更好的工具以及运行时支持,所以即便它们不是为这个目的而被构建也可以使应用程序的通信变得更容易。例如,有这样一些工具,它们可以构建用来访问
WSDL 文档所描述的服务的客户机端代理。WSDL 文档可以从现有代码中派生出来。由于 WSDL 是一个<I>事实上的</I>标准(经过了 W3C
的正式标准化,这是不久的将来所需要的),所以它得到了多个供应商实现的支持。同样,还存在各种运行时软件包,它们支持通过 SOAP 供应和消费 Web
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -