EJB3使得创建一个web service是何等的容易。
你只需要把
一个普通
POJO or
一个
EJB3 stateless session bean
加上几个
web service
的
annotation
就搞定,根本不需要生成其他配置文件,爽!
创建和使用
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
,而传递的方式却可以多种多样:如
HTTP
、
JMS
、
SMTP
、
FTP
都可以。
常用的三种
实现
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
的
标准
。
它的
具体目的是详细说明(
specify
)
Web 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 service
的
WSDL
的
url
给他就好,不用去管
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
主要有
2
种
type
:
1.RPC-oriented
2.document-oriented
在web service刚红的时候用RPC比较受欢迎,但现在基本都是用document-oriented。因为document-oriented web service的xml schema更好用。
Web service
的
messaging style
也有
2
种
type
:
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 style和message 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
的最主要目的就是简化
Java
对
web service
的开发。
Why choose EJB over a POJO for a web service?
文章一开始我就提到:
在
J2EE 5
里,
POJO
和
stateless session bean
都可以作为
web service
。而使用stateless session bean作为web service则有更多的优点。
实际上,
POJO
和
EJB 3
之间除了
EJB 3
多了几个
annotations
之外,其他都是完全一样的。
*
POJO web service是被打包到web module(如WAR)里,而EJB 3 web service是被打包到EJB-JAR里。
Both POJO web service and EJB web service
都
support 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的一些比较:
