当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > JAVA > EJB > 正文

EJB 2.1中实现Web Service(1)

http://www.zk168.com.cn  招考学习网 2006-4-11 3:04:06
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
EJB 2.1中实现Web Service(1)

EJB2.1(Enterprise JavaBeans 2.1)正式推荐版本已经出台,它产生的动力主要是Enterprise JavaBeans对支持Web Service的需求,同时也是因为Microsoft .NET的发布,它对J2EE或者说对Java技术来说已经构成了巨大威胁。在新版本的EJB2.1中,主要的变化主要集中在基于SOAP和WSDL的Web Service上。EJB已经成为一种新的Web Service平台。它对Web Service的支持主要体现在三个新的Web Service API上:分别是JAX-RPC(Java API for XML-RPC,它基本上是通过SOAP实现的Java RMI,为RPC格式的SOAP消息提供远端接口)、SAAJ(SOAP API with Attachments for Java,它模仿SOAP消息的结构,同时也有功能有限的消息分发能力)和JAXM(Java API for XML Messaging,它类似于JMS,提供发送和接收SOAP消息的消息架构),利用它们可以实现与其它类型的Web Service进行通讯,而且还允许无序的会话Bean和消息驱动的Bean来作为Web Service使用,使它们能够被任何与 SOAP1.1兼容的客户端所访问。例如:使用SOAP,我们就可以从其它平台Web Service来调用无序的会话Bean的方法,象微软的.NET,Perl,Apache Axix和其他的语言和平台。EJB2.1中新的Web Service功能能够提供一种前所未有的跨平台互操作性,它主要是建立在两个崭新的J2EE SOAP工具包JAX-RPC和JAXM。

Web Service代表了分布式计算的最新潮流,可能是自1995年Java的出现和1998年XML出现以来最重要的技术了。其实,给Web Service下一个准确的定义是很难的,因为Web Service并不是任何特殊技术或者平台所特有的,Web Service是一种网络应用程序,以XML形式的文档,使用SOAP和WSDL进行信息交换。要更好地理解这句话的含义,你必须先理解SOAP和WSDL,下面是有关这方面的定义:

SOAP:简单对象访问协议(Simple Object Access Protocol),是在W3C的支持下,由Microsoft,IBM和其他公司开发的,基于XML格式的一种协议,它是可伸缩和可扩展的,不象以前的DCE RPC, CORBA IIOP, Java RMI-JRMP以及DCOM,它已经被几乎所有的开发厂商所认可和接受。

WSDL:Web服务描述语言(Web Service Description Language),也是在W3C的支持下,由Microsoft,IBM和其他公司开发的,XML格式的语言,用来对Web Service进行描述,包括期望的消息格式类型、所使用的Internet协议和Web Service的Internet地址。

其实,Web Service代表了一种新的分布式对象技术,它和CORBA IIOP和Java RMI很相似,但也有许多差异,最大的差异应该就是真正的平台无关性。尽管Java RMI和CORBA IIOP都声称自己是平台无关的,但实际上,它们都需要它们自己的平台。要使用Java RMI,你需要一个Java虚拟机和Java编程语言,对使用其它语言的开发者如Visual Basic或C++来说,Java RMI并不是平台无关的。CORBA IIOP也是有局限性的,IIOP协议通常需要一个特定的架构如CORBA ORB,也只有少数几个厂商支持CORBA。另一方面,Web Service着重描述信息交换的协议,而不是着重描述对这些协议的实现,换句话说,你可以用任何语言,在任何平台上,以任何你自己喜欢的方式来创建Web Service。

Web Service另外一个好处就是,不象其它的分布式对象体系,它建立在现有的技术架构的基础之上,因此大多说厂商很容易实现。SOAP和WSDL都是基于XML的,而XML已经被广泛支持,XML解析器在几乎每一种开发语言中都有,因此,处理SOAP消息和WSDL文档的基础已经存在了。此外,Web Service消息通常是通过TCP/IP进行交换的,也已经被几乎所有的平台和语言所支持。

JAX-RPC和EJB

JAX-RPC(Java API for XML-RPC)实质上就是通过SOAP访问的Java RMI。它和“本地的”Java RMI (Java RMI-JRMP)和Java RMI-IIOP很象,但是它是以SOAP作为通讯协议。要实现JAX-RPC,最低要求是必须对通过HTTP访问的SOAP支持RPC编码,但是,我们仍然可以提供对其他编码方式、消息格式和Internet协议的支持。JAX-RPC能够被用来从会话、实体和消息驱动的Bean来调用Web Service的操作。JAX-RPC能够用来访问其它平台的Web Service。例如:一个无序的会话Bean可能会使用JAX-RPC来调用.NET Web Service的方法。如下图所示:

每个EJB开发商都会提供自己对JAX-RPC的实现,但它们之间的差别是很小的,主要是因为所有的实现都必须遵照JAX-RPC规范,JAX-RPC能够当作客户端API来访问其它的Web Service,但是,它同时也是一个被称作“EndPoint接口”的新型企业Bean接口。当JAX-RPC当作客户端API的时候,会话、实体或者消息驱动的Bean能够使用它与其它平台的Web Service交换消息。JAX-RPC定义了三种编程模型:Generated Stub、Dynamic Proxy和DII(Dynamic Invocation Interface),我们在EJB环境中常用的Generated Stub模型。

如果使用JAX-RPC去访问Web Service,那么,这个Web Service必须发行一个WSDL文档,EJB开发商提供的JAX-RPC工具包产生Java RMI接口和实现WSDL文档所描述的Web Service操作的Stub,一旦Stub和接口创建出来之后,我们就可以把它们与企业Bean的JNDI ENC(Environment Naming Context)进行绑定,然后与 Web Service进行通信。

WSDL把访问Web Service的接口描述成“端口”,每个端口有一个或者多个“操作”,端口和操作的概念和Java的接口和方法类似。实际上,JAX-RPC定义了WSDL和Java RMI之间的映射关系,它产生来自端口的远端接口,并带有响应端口操作的方法。例如:一个WSDL文档可能描述一个被称作“BookPrice”、并带有单个操作getBoolPrice的端口,下面就是BookPrice WSDL文档的一些简单代码:

<?xml version="1.0"?>

<definitions name="BookPrice"

targetNamespace="http://lucky.myrice.com/GetBookPrice"

xmlns:tns="http://lucky.myrice.com/GetBookPrice"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<!-- 描述参数和返回值的message元素 -->

<message name="IsbnMessage">

<part name="isbn" type="xsd:string" />

</message>

<message name="PriceMessage">

<part name="price" type="xsd:float" />

</message>


<!-- 描述Web Service抽象接口的portType元素 -->

<portType name="BookPrice">

<operation name="getBookPrice">

<input name="isbn" message="tns:IsbnMessage"/>

<output name="price" message="tns:PriceMessage"/>

</operation>

</portType>

<!-- 在这里进行绑定 -->

<!-- service元素告诉我们Web Service的地址 -->

<service name="BookPriceService">

<port name="BookPrice" binding="tns:BookPrice_Binding">

<soap:address location="http://lucky.myrice.com/BookPrice" />

</port>

</service>

</definitions>

在部署的时候,JAX-RPC Stub生成工具会把WSDL端口转换成远程接口和Stub,端口和服务Stub可能是下面的样子:

public Interface BookPriceService extends javax.xml.rpc.Service{

public BookPrice getBookPrice( ) throws RemoteException;


}

public Interface BookPrice extends java.rmi.Remote {

public float getBookPrice(String isbn)

throws RemoteException;

}

这里只是一个简单的例子,这个服务只有一个端口,而实际上一个服务会有多个端口,每个端口有相应的接口和Stub。一旦接口和Stub产生并被绑定到JNDI ENC之后,它们就可以在运行期调用Web Service的“操作”了,在下面的无序会话Bean里,BookCatalog EJB利用JAX-RPC从.NET Web Webvices查找一本书的批发价格。

public class BookCatalog implements javax.ejb.SessionBean {

...

public float getWholeSalePrice(String isbn) {

try {

InitialContext jndiContext = new InitialContext ( );

BookPriceService service =

jndiContext.lookup("java:comp/env/service/BookPriceService");

BookPrice bookPrice_port = service.getBookPrice();

float price = bookPrice_port.getBookPrice( isbn );

return price;

catch(RemoteException re){

}catch(ServiceException se){

}catch(NamingException ne){

}

}
...

}


当调用getBookPrice()方法时,JAX-RPC Stub向.NET Web Service发送SOAP信息,Stub产生的SOAP信息可能会是下面的样子:


<?xml version=´1.0´ ?>

<env:Envelope

xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xyz=´ ;http://lucky.myrice.com/BookPrice "

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<Body>

<xyz:getBookPrice>

<isbn xsi:type="string">1565928695

</xyz:getBookPrice>

</Body>

</env:Envelope>

.NET Erb Services处理SOAP信息,并把结果返回到Stub,Stub分析结果,最后向客户端发送最终结果。

(未完待续)
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·21世纪以煤和天然气为原料的C1化学
·BOG压缩机在液化石油气基地的应用
·OECD主要国家软件业发展概况
·英美CPA管理模式及其启示
·沙角C电厂事故顺序记录的通道组态分析及整改
·LFCB-102型微波分相差动保护的应用
·沙角C电厂厂用电结线分析
·基于PB6和ORACLE8开发“劳动信息管理系统”
·利用TDC组件实现对WEB页面的交互操作
·TCP/IP在网络中的高效配置
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>