📄 用 web 服务和 j2ee 集成企业应用程序.htm
字号:
服务,我们只是给出了一个协议作为示例。</P>
<P>考虑到所有这些因素,把 J2EE 环境的特征(健壮性、可伸缩性、安全性和其他特征)与 Web
服务技术的优点(也即平台和编程语言独立性)结合在一起用于企业应用程序的集成好象是一个显而易见的选择。要使用我们在上面描述的 J2EE 规范(JMS
和
JCA),应用程序开发者需要了解一些特定的编程接口。我们想定义一个独立于这些接口的编程模型,这个模型提供了从面向服务的角度来看待现有业务流程和功能。这表示着我们正在寻求一个通用的编程模型,这个模型可以跨各种不同的调用机制应用。在这个模型中,作为一个开发者您只需要关心用
WSDL 描写的服务的接口,而无需关心用来访问该服务的特定调用协议。</P>
<P><A name=3><SPAN class=atitle2>WSDL 中的协议绑定</SPAN></A><BR>任何 WSDL
文档都包含三部份。第一部分定义了服务的抽象接口,用<I>端口类型(port
type)</I>表示,它包含<I>操作</I>集合(也就是业务功能)。每个操作都是通过输入消息和可选的输出消息定义的。这些消息就是 XML
文档,用一个或多个 XML Schema 描述。</P>
<P>WSDL 定义的第二部分被称为<I>协议绑定(protocol binding)</I>。这部分指定给定的服务所响应的协议。例如,目前的大多数
Web 服务都是使用 SOAP 协议(请参阅<A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#resources">参考资料</A>)实现的。您可以在该服务的
WSDL 文档中添加关于如何构建服务可以解释的 SOAP <I>信封(envelope)</I>的详细信息。</P>
<P>最后,WSDL 文档中包含的第三部分信息是所描述的服务的<I>端点(endpoint)</I> —
也就是驻留在应用程序服务器上某个地方的实际业务逻辑的位置。这个位置可以是一个 URL(对于 SOAP
来说),或者只是协议可以用来定位服务的地址。</P>
<P>我们在上面已经说过,J2EE 标准定义了一些通过使用象 JMS 和 JCA 这样的 API 集成非 J2EE 应用程序的方法。那么,同时利用
J2EE 和 Web 服务需要些什么呢?业务功能的抽象定义(可以通过一个 WSDL 中的端口类型来描述)并不依赖所使用的协议。这样,我们就可以在
WSDL 定义中的协议绑定部分描述关于服务的所有特定于 JMS 和特定于 JCA 的信息。<A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#figure3">图
3</A> 展示了如何将 JCA 资源适配器的一些部件映射为相应的 WSDL 构件。</P>
<P><A name=figure3><B>图 3. WSDL 到 JCA 的映射示例</B></A><BR><IMG height=306
alt="WSDL 到 JCA 的映射示例" src="用 Web 服务和 J2EE 集成企业应用程序.files/fig3.gif"
width=414> </P>
<P>我们可以为所有类型的不同协议定义绑定。我们已经提到了 JMS 和
JCA,它们可能是与企业应用程序集成联系最为紧密的协议。但我们还可以很容易地利用 WSDL 进行普通的调用或调用 Enterprise
JavaBeans。对于应用程序开发者开说,所使用的特定协议应该是透明的,这样他或她才能够将注意力集中在业务接口上,而不必处理调用这些接口的各种客户机编程模型。这样,您就有可能通过许多客户机访问协议来访问服务,如<A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#figure4">图
4</A> 所示。</P>
<P><A name=figure4><B>图 4. 创建到一个服务实现的多个绑定</B></A><BR><IMG height=325
alt=创建到一个服务实现的多个绑定 src="用 Web 服务和 J2EE 集成企业应用程序.files/fig4.gif" width=481>
</P>
<P><A name=4><SPAN class=atitle2>Web
服务调用框架</SPAN></A><BR>目前为止,我们已经说过,如果想使用 J2EE、JMS 和 JCA
中提供的集成技术集成旧应用程序的话,我们可以把旧应用程序的接口描述为 WSDL
端口类型,并添加协议绑定(这些绑定附带关于如何访问它们的信息)。为了真正独立于所有的编程接口,我们需要这样一种机制,它可以解析和解释 WSDL
中包含的绑定信息,还可以为服务生成适当的运行时调用。例如,如果一个服务可以通过 JCA 资源适配器访问,我们就需要一种方法来自动利用该适配器提供的
CCI 接口 — 而不必要求应用程序开发者知道如何使用
CCI。换句话说就是,我们希望能够只根据服务的接口来调用这个服务,而不是根据其实现或协议。</P>
<P>Web 服务调用框架(WSIF;请参阅<A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#resources">参考资料</A>获得相关链接)提供了一个接口,该接口允许对
Web 服务的调用独立于被用于与该服务实际进行通信的协议。它的编程接口严格基于 WSDL 端口类型定义的抽象服务接口。适当的请求消息是在运行时根据
WSDL 文档中的绑定信息构建的,这样它对应用程序开发者就是透明的。</P>
<P><A name=5><SPAN class=atitle2>结束语</SPAN></A><BR>现在的许多 IT
工厂都面临着集成运行在异构环境中的应用程序的挑战。Java 2
平台,企业版定义了各种允许集成这些应用程序的编程接口,然后这些应用程序就可以被用来构建新的、支持 Web
的、健壮的且安全的企业解决方案。这些接口中最突出的是 JMS 和 JCA。JMS 将异步且松散地耦合旧应用程序,而 JCA
允许通过同步且事务性的接口进行更紧密的耦合。</P>
<P>Web 服务技术为业务系统引入了面向服务的体系结构这个概念。业务功能是用基于 XML 的抽象定义表示的,就象 WSDL
文档中描述的那样。我们可以通过用 WSDL 定义用于 JMS 和 JCA 的特定的协议绑定来集成 J2EE 和 Web
服务技术;这样我们就可以用一种通用的、独立于协议的方式来定义后端接口。在运行时,“Web
服务调用框架”处理服务调用的生成而不考虑协议,这意味着应用程序开发者不必管理用来访问业务功能的多个编程接口。</P>
<P>虽然这种技术并不排除对 EAI
的需要,但由于它增加了标准的级别,得到了许多供应商的支持,而这些都是可以利用的,所以它从运行时和工具这两方面都提高了可以用来集成异构应用程序的自动化程度。这样只会使集成过程更加容易。</P>
<P><A name=resources><SPAN class=atitle2>参考资料</SPAN></A>
<UL>
<LI>看一下 Sun Microsystems 关于 <A
href="http://java.sun.com/products/jms/">Java 消息传递服务(JMS)</A>和 <A
href="http://java.sun.com/j2ee/connector/">Java 2 连接器体系结构(JCA)</A>的页面。
<LI>如果想了解 W3C 的标准化工作进展情况,请通过该组织的 <A
href="http://www.w3.org/2002/ws/arch/">Web Services Architecture Working
Group</A> 了解最新动态。
<LI><I>Rahul Sharma、Beth Stearns、Tony Ng、Scott Dietzen 合著的 <A
href="http://www.aw.com/catalog/academic/product/1,4096,0201775808,00.html">J2EE
Connector Architecture and Enterprise Application
Integration</A>,</I>(Addison Wesley,2001)是一篇关于 EAI 的优秀书籍。图 2
就是从这个文本中摘录的。
<LI>要查找更多关于 WSIF 的信息,请阅读“<A
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=http://www-106.ibm.com/developerworks/webservices/library/ws-appwsif.html&origin=ws">Applying
the Web Services Invocation Framework</A>”,Paul
Fremantle(developerWorks,2002 年 6 月)。
<LI>学习更多关于 <A href="http://xml.apache.org/axis/">Apache Axis</A> 的知识。
</LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1><SPAN class=atitle2>关于作者</SPAN><BR>Daniela
Rudrof 是一位安全性操作(Security Operation)方面的 IT 专家,在 IBM 的 Control and
Compliance GU Main 部门工作。她帮助确保 IBM 内以及外部客户的安全性标准。在开始从事目前的工作之前,她在
WebSphere Business Development Group 写了自己最后的论文,主要是关于 J2EE 技术和 Web
服务的。Daniela 在德国居住和生活。在闲暇时候,她喜欢出门,参与一些体育活动,包括英式足球、游泳和武术。您可以通过 <A
href="mailto:Daniela.Rudrof@de.ibm.com">Daniela.Rudrof@de.ibm.com</A>
与 Daniela 联系。</TD></TR>
<TR>
<TD>
<P><A name=author2><BR></A>Andre Tost 是 IBM WebSphere Business
Development group 的一位解决方案设计师,他在这个部门帮助 IBM 的战略联盟伙伴把他们的应用程序与 WebSphere
集成在一起。他的工作重点是贯穿整个 WebSphere 产品系列的 Web 服务技术。在开始从事他目前的任务之前,他有十年的时间是在
IBM 软件开发工作中担任各种开发和体系结构方面的角色,最近是在从事 WebSphere Business Components
产品。他出生于德国,目前在美国明尼苏达州的罗切斯特居住和工作。在业余时间,他喜欢和他的家人在一起,只要有可能就去踢球或者看球。您可以通过
<A href="mailto:atost@us.ibm.com">atost@us.ibm.com</A> 与 Andre 联系。
</P></TD></TR></TBODY></TABLE><!-- END PAPER BODY--></TD>
<TD width=10><IMG height=1 alt=""
src="用 Web 服务和 J2EE 集成企业应用程序.files/c.gif" width=10
border=0></TD></TR></TBODY></TABLE><!-- END PAPER BODY--><BR clear=all><IMG
height=10 alt="" src="用 Web 服务和 J2EE 集成企业应用程序.files/c.gif" width=100
border=0><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right width="100%"><A
href="http://www-900.ibm.com/developerWorks/cn/webservices/ws-eai/index.shtml#top">到页首</A></TD>
<TD width=5><IMG height=1 alt="" src="用 Web 服务和 J2EE 集成企业应用程序.files/c.gif"
width=5 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=2><IMG height=1 alt=""
src="用 Web 服务和 J2EE 集成企业应用程序.files/c.gif" width=100 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=2><IMG height=8 alt=""
src="用 Web 服务和 J2EE 集成企业应用程序.files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD>
<FORM action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument
method=post><INPUT type=hidden
value=" Integrate enterprise applications with Web services and J2EE"
name=ArticleTitle> <INPUT type=hidden value="web services" name=Zone>
<INPUT type=hidden value=/developerWorks/cn/thankyou/feedback-xml.html
name=RedirectURL> <A name=rating><B>您对这篇文章的看法如何?</B></A>
<TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD colSpan=5><IMG height=8 alt=""
src="用 Web 服务和 J2EE 集成企业应用程序.files/c.gif" width=100 border=0></TD></TR>
<TR vAlign=top>
<TD width="16%"><INPUT type=radio value=5 name=Rating>真棒!(5)</TD>
<TD width="20%"><INPUT type=radio value=4 name=Rating>好材料 (4)</TD>
<TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 (3)</TD>
<TD width="22%"><INPUT type=radio value=2 name=Rating>需提高 (2)</TD>
<TD width="18%"><INPUT type=radio value=1 name=Rating>太差!
(1)</TD></TR></TBODY></TABLE><BR><B>建议?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA>
<BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff><IMG height=8 alt=""
src="用 Web 服务和 J2EE 集成企业应用程序.files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right>(c) Copyright IBM Corp. 2001, (c) Copyright IBM China
2001, All Right Reserved</TD></TR>
<TR vAlign=top>
<TD class=bbg height=21> <A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&origin=dwhead">关于
IBM</A><SPAN class=divider> | </SPAN><A
class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/privacy/index.shtml&origin=dwhead">隐私条约</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/legal/index.shtml&origin=dwhead">使用条款</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/contact/index.shtml&origin=dwhead">联系
IBM</A></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2 src="用 Web 服务和 J2EE 集成企业应用程序.files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt=""
src="E:\thread\threadcollection\0907\用 Web 服务和 J2EE 集成企业应用程序.files\c(2).gif"
width=1 border=0></NOSCRIPT> </A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -