EJB3 Web Service

来源:互联网 发布:宁阳移动宽带网络 编辑:程序博客网 时间:2024/05/21 06:46
 
EJB3使得创建一个web service是何等的容易。你只需要把一个普通POJO or一个EJB3 stateless session bean加上几个web serviceannotation就搞定,根本不需要生成其他配置文件,爽!
 
创建和使用web service的一个简单流程是
1.创建一个web service (包括提供WSDL)
2.在UDDI registry注册该service
3.在client side,先从UDDI registry search该service的WSDL
4.然后根据该WSDL来call该web service
 
 
Web service传递的data是基于XML,而传递的方式却可以多种多样:如HTTPJMSSMTPFTP都可以。
 
常用的三种实现web service的方式有3种:
1.REST (Representational State Transfer)
2.XML-RPC (Extensible Markup Language–Remote Procedure Call)
3. SOAP
 
最常用的方式是SOAP,原因是SOAP是很多行业(如travel, health care, financial)sharing industry-specific data的标准都是基于SOAP的!!
 
REST方式也比较常用(如amazon, yahoo都是用它),但J2EE 5不支持它,但GlassFish支持它。
 
相关概念
SOAP
英文原文定义:
SOAP is a simple XML based protocol to let applications exchange information over HTTP
Or more simply: SOAP is a protocol for accessing a Web Service
 
中文定义:SOAP是一种基于协议(protocol)的,使应用程序(application)之间在HTTP基础上相互交换数据的XML。
 
WSDL是一种基于XML的,用来描述Web Service的以及如何进入Web Service标准它的具体目的是详细说明(specifyWeb Service 的位置(Location),和Web Service所执行的操作(operations or methods
 
有关SOAP、WSDL的详细讲解,见笔记“SOAP + WSDL笔记.doc”,虽然是N年前写的,和现在的有点出入,但原理还是一样
 
UDDI:是统一描述、发现和集成(Universal Description, Discovery, and Integration)的缩写。它是一个基于XML的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务
 
如果你的web service想要share出去,别人怎样才能发现到你web service?你就要在一家UDDI registry里注册你的web service,这样别人才能够在search UDDI registry时有可能会发现你的web service。这就是UDDI的最重要目的
 
当然如果你不想你的web service被公开,只希望某几个朋友或某个系统知道,你只需要把你的web serviceWSDLurl给他就好,不用去管UDDI
 
SOAP Example:
<SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
       <addBid xmlns="http://actionbazaar.com/Bidding">
           <user-id>viper</user-id>
           <item-id>100</user-id>
           <bid-price>2000.24</bid-price>
       </addBid>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 
WSDL Example:略
 
 
Web services styles
Web service styles主要有2type
1.RPC-oriented
2.document-oriented
 
在web service刚红的时候用RPC比较受欢迎,但现在基本都是用document-oriented。因为document-oriented web service的xml schema更好用。
 
Web servicemessaging style也有2type
1.Literal
2.Encoded
 
如果使用literal,messages之间的交换是使用plain XML。如果是使用encoded的话,那么encoded message就要包含一个知道如何去decode message的rules。这样message的接收者要根据这些rules来decode message。WS-I Basic Profile 1.1 目前不支持encoded messages..
 
因此最常用、也是最方便好用的web service stylemessage style结合的方式就是document + literal
 
Introducing J2EE 5 web services platform
Java API for XML-Based Web Services (JAX-WS) 2.0是J2EE 5的web service规范标准。JAX-WS 2.0 JAX-RPC 1.0的扩展。JAX-WS 2.0的最主要目的就是简化Javaweb service的开发
 
 
Why choose EJB over a POJO for a web service?
文章一开始我就提到:J2EE 5里,POJOstateless session bean都可以作为web service而使用stateless session bean作为web service则有更多的优点。
 
实际上,POJOEJB 3之间除了EJB 3多了几个annotations之外,其他都是完全一样的。
 
* POJO web service是被打包到web module(如WAR)里,而EJB 3 web service是被打包到EJB-JAR
 
Both POJO web service and EJB web servicesupport dependency injection and lifecycle methods (例如@PostConstruct and @PreDestroy
 
但使用EJB 3 web services会有以下几个好处
1.可以直接利用EJB在transaction和security方面的优点,还可以使用EJB提供的一些功能(例如:time service)
2.EJB 3 web service能够很容易expose your business applications using additional protocols, 例如通过添加一个remote interface来expose to RMI。
 
下面的列表列出了POJO web service and EJB web service的一些比较:
 
 
 
原创粉丝点击