ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:38.48KB ,
资源ID:23492922      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23492922.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(webservice使用EJB.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

webservice使用EJB.docx

1、webservice使用EJBEJB2.1(Enterprise JavaBeans 2.1)正式推荐版本已经出台,它产生的动力主要是Enterprise JavaBeans对支持Web Service的需求,同时也是因为Micr osoft .NET的发布,它对J2EE或者说对Java技术来说已经构成了巨大威胁。在新版本的EJB2.1中,主要的变化主要集中在基于SOAP和WSDL的 Web Service上。EJB已经成为一种新的Web Service平台。它对Web Service的支持主要体现在三个新的Web Service API上:分别是JAX-RPC(Java API for XM

2、L-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,我们就可以从其它平台We

3、b 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和WS

4、DL进行信息交换。要更好地理解这句话的含义,你必须先理解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和其他公

5、司开发的,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并不是平台无关的。CORB

6、A IIOP也是有局限性的,IIOP协议通常需要一个特定的架构如CORBA ORB,也只有少数几个厂商支持CORBA。另一方面,Web Service着重描述信息交换的协议,而不是着重描述对这些协议的实现,换句话说,你可以用任何语言,在任何平台上,以任何你自己喜欢的方式来创建 Web Service。 Web Service另外一个好处就是,不象其它的分布式对象体系,它建立在现有的技术架构的基础之上,因此大多说厂商很容易实现。SOAP和WSDL都是基于 XML的,而XML已经被广泛支持,XML解析器在几乎每一种开发语言中都有,因此,处理SOAP消息和WSDL文档的基础已经存在了。此外,Web

7、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的操作。JA

8、X-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定义了三种编程

9、模型: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 Servi

10、ce进行通信。 WSDL把访问Web Service的接口描述成“端口”,每个端口有一个或者多个“操作”,端口和操作的概念和Java的接口和方法类似。实际上,JAX-RPC定义了 WSDL和Java RMI之间的映射关系,它产生来自端口的远端接口,并带有响应端口操作的方法。例如:一个WSDL文档可能描述一个被称作“BookPrice”、并带有 单个操作getBoolPrice的端口,下面就是BookPrice WSDL文档的一些简单代码: 在部署的时候,JAX-RPC Stub生成工具会把WSDL端口转换成远程接口和Stub,端口和服务Stub可能是下面的样子: public Interfac

11、e BookPriceService extends javax.xml.rpc.Servicepublic BookPrice getBookPrice( ) throws RemoteException;public Interface BookPrice extends java.rmi.Remote public float getBookPrice(String isbn)throws RemoteException;这里只是一个简单的例子,这个服务只有一个端口,而实际上一个服务会有 多个端口,每个端口有相应的接口和Stub。一旦接口和Stub产生并被绑定到JNDI ENC之后,它们

12、就可以在运行期调用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(j

13、ava: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信

14、息可能会是下面的样子: 1565928695.NET Erb Services处理SOAP信息,并把结果返回到Stub,Stub分析结果,最后向客户端发送最终结果。 JAX-RPC Stub中的方法可以有参数,参数类型可以是基本数据类型,如int,long等;基本包装类型,如 java.lang.Interger,java.lang.Long等;数组;Java标准类型,如String,Date等;也可以是自定义对象类 型。自定义对象必须符合JAX-RPC规范的规则。 除了产生Stub外,JAX-RPC也支持动态代理服务,除了它的远程接口和Stub的实现是在运行时动态产生的之外,动态代理服务的作

15、用和Stub一 样。下面的例子就是JAX-RPC产生动态Stub的: public class BookCatalog implements javax.ejb.SessionBean .public float getWholeSalePrice(String isbn) try InitialContext jndiContext = new InitialContext ( );javax.xml.rpc.Service service =jndiContext.lookup(java:comp/env/service/DynamicService);BookPrice bookPric

16、e_port = service.getPort(BookPrice.class);float price = bookPrice_port.getBookPrice( isbn );return price;catch(RemoteException re)catch(ServiceException se)catch(NamingException ne).在运行时,getPort()方法自动把BookPrice接口映射到 WSDL文档里定义的相应端口,然后产生Stub实现接口的工作。 JAX-RPC还支持名为DII(Dynamic Invocation Interface)的动态API,

17、DII允许开发人员在运行时调用SOAP方法。如果你使用过CORBA Dynamic Invocation Interface的话,那你对JAX-RPC DII一定很容易理解。JAX-RPC DII类似于Java的反射(Reflection),它允许你以方法的形式得到一个代表Web Service操作的对象的参考,调用那个方法,就无需再访问Service Factory或者再使用Stub和远端接口。下面的例子就是企业Bean访问BookPrice端口的getBookPrice()操作: public class BookCatalog implements javax.ejb.SessionBe

18、an .public float getWholeSalePrice(String isbn) try InitialContext jndiContext = new InitialContext ( );javax.xml.rpc.Service service =jndiContext.lookup(java:comp/env/service/DynamicService);QName port = new QName( ,BookPrice);QName operation = new QName(getBookPrice);Call callObject = service.crea

19、teCall(port, operation);Object args = new Object1; args0 = isbn;Float price = (Float) callObject.invoke( args );return price.floatValue();catch(JAXRPCException se)catch(NamingException ne).实际上,你可以在运行期配置参数、类型、编码等,你能用WSDL配置的 所有信息都可以用DII动态配置。 JAX-RPC另外还是一个称为终端接口(Endpoint Interface)的新型组件,这个新接口允许我们把无序的会话

20、Bean作为Web Service来实现,这个终端接口简化了javax.rmi.Remote接口的实现,并且遵守JAX-RPC规范中的规则。把一个无序的会话Bean 作为Web Service来实现是非常简单的:只需定义Bean类和远端接口,然后使用开发商的提供的工具来实现。一旦建立了Web Service,它的方法就能够被任何SOAP兼容的、来自任何语言和平台的工具包来调用,比如:.NET,Perl,Apache Axis,C,C+等等。如下图所示: 由 于JAX-RPC仅仅是Java RMI的另外一种形式,因此,利用它访问企业Bean是很自然的,我们以前已经利用RMI-IIOP和RMI访问

21、过。利用JAX-RPC与EJB进行通信 意味着EJB可以当作Web Service来使用,至少无序的Bean是可以的。EJB2.1允许我们利用JAX-RPC,但只能是应用于无序的Bean,这主要是因为SOAP是一 种无序的消息协议,它没有对象识别的概念,因此它不能应用在有序的和实体的Bean中。 EJB2.1为无序的Bean定义了一个新的Web Service终端(EndPoint)接口,Web Service界的人使用“终端”来称呼发送和接收SOAP信息的任何东西。在EJB中,终端就是一个无序的会话Bean,它可以通过SOAP来访问,并 且遵照JAX-RPC规范中定义的从Java-to-WS

22、DL到Java-to-SOAP的映射规则。使用JAX-RPC最为EJB终端的基础是顺理成章 的,因为JAX-RPC规范中定义了SOAP消息和Java方法调用以及从Java远程接口产生WSDL文档的详细规则。 不象EJB开发者已经很熟悉的远端和本地接口,终端接口并没有继承EJB对象类型,如EJBObject或EJBLocalObject。相反,终端接口 直接继承了javax.ejb.Remote接口。例如:在上面的例子中的BookPrice的Web Service能够很轻易实现为EJB中的终端。下面的代码说明了一个BookPrice的终端接口,和实现为Web Service的无序会话Bean的部

23、分列表。 public interface BookPrice extends javax.rmi.Remote public String getBookPrice(String isbn) throws javax.rmi.RemoteException;public class BookPriceWS implements BookPrice, javax.ejb.SessionBean public float getBookPrice(String isbn)Connection con = null;Statement stmt = null;ResultSet rs;try Da

24、taSource ds = jdniEnc.lookup(java:comp/env/jdbc/DataSource);con = ds.getConneciton();stmt = con.createStatement();rs = stmt.executeQuery(SELECT wholesale FROM CATALOG WHERE isbn = +isbn+);if(rs.next()float price = rs.getFloat(wholesale);return price;elsereturn 0;catch (SQLException se) /处理异常.终端接口比远程

25、和本地接口一个很明显的好处就是它不会带来象 EJBObject或者EJBLocalObect无用方法等形式的额外负担,此外,终端接口没有包括home接口,SOAP不支持按引用传值。因此,你 不能要求一个Web Services接口(home 接口)按引用传递到另外一个远端接口,更进一步讲,你不能创建或移除一个Web Service。 当我们把一个无序会话 Bean开发成Web Service时,首先定义一个终端接口,然后利用它产生JAX-RPC的客户端Stub和WSDL文档或者如果你产生JAX-RPC客户端Stub,无 需做任何改变,你可以把它包装成J2EE客户端JAR,利用它去访问无序会话B

26、ean,利用SOAP做通讯协议。如果你从终端接口产生WSDL文档,其它 的SOAP工具包也能够使用这个文档去访问你的无序Bean。WSDL和SOAP是Web Service的基础,因此,为EJB Web Services发布WSDL可以实现与其它平台的交互。 SAAJ SAAJ(SOAP with Attachments API for Java)是一个基于API的SOAP工具包,它定义了SOAP Messages with Attachments (SwA)和SOAP用的MIME信息格式。Java开发人员能够利用SAAJ来创建、读取或者修改SOAP信息。这个API包含许多类和接口,用来定义

27、SOAP元素(Envelope, Body, Header, Fault等),XML名称空间,属性,文字节点以及MIME附件。你可以使用SAAJ操作简单的、没有附件的XML格式的SOAP信息,也可以操作更加 复杂的、带Mime附件的SOAP信息。SAAJ可以与JAX-RPC结合使用,但也可以单独使用,它有自己的、通过HTTP1.1实现的请求/应答方式 的消息机制。 SAAJ是基于Abstract Factory模式的。SAAJ是类型的抽象集合,每一种类型的对象都是由SAAJ集合中另外的对象产生的。在Abstract Factory的SAAJ实现中,MessageFactory类是根,它负责创建自己的实例,反过来创建 SOAPMessage,SOAPMessage包含SOAPPart,它代表SOAP文档、0个和多个AttachmentPart(代表附件的对象, 如GIF,PDF等)。SOAPPart包含SOAPEnvelope、SOAPBody、SOAPHeader和其它类

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1