Java Web 服务性能优化案例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java Web 服务性能优化案例

简介:本文介绍如何提升Java Web 服务性能,主要介绍了三种方法:一是采用 Web 服务的异步调用,二是引入Web 服务批处理模式,三是压缩SOAP 消息。重点介绍在编程过程中如何使用异步Web 服务以及异步调用和同步调用的差异点。本文还示范了如何在项目中使用以上三种方法,以及各种方法所适合的应用场景。

Java Web 服务简介

Web 服务是一种面向服务架构的技术,通过标准的 Web 协议提供服务,目的是保证不同平台的应用服务可以互操作。Web 服务(Web Service)是基于XML 和HTTP 通讯的一种服务,其通信协议主要基于SOAP,服务的描述通过WSDL、UDDI 来发现和获得服务的元数据。这种建立在XML 标准和Internet 协议基础上的Web 服务是分布式计算的下一步发展方向,Web 服务为那些由不同资源构建的商业应用程序之间的通信和协作带来了光明的前景,从而使它们可以彼此协作,而不受各自底层实现方案的影响。

JAX-RPC 1.0 是Java 方面的Web 服务的原始标准, 但是由于JAX-RPC 1.0

对Web 服务功能的认识有一定的局限,于是JAX-WS 2.0 应用而生。JAX-WS 2.0 开发工作的主要目标是对各项标准进行更新,成功实现了业界对JAX-RPC 1.X 的各种期望。此外,JAX-WS 2.0 直接支持XOP/MTOM,提高了系统附件传送能力以及系统之间的互操作性。

实例剖析Web 服务性能瓶颈

通过以上简述不难体会到,Web 服务以其XML + HTTP 的松耦合、平台无关的特性,集万般宠爱于一身,必将成为未来数据共享的基础。但与此同时我们也应当认识到世间完事万物均有其矛盾的两面性:有优点,必将存在缺点,Web 服务亦是如此。就像当初JAVA 大行其道的时候性能成为其致命诟病一样,Web 服务也同样面临性能问题,似乎“性能问题”天生就是“平台无关”挥之不去的冤家。但问题终归要解决,实践是检验和分析问题的唯一途径,让我们先来创建一个简单的Web 服务再来审视和分析隐含其中的性能问题。

创建服务

创建服务Java Bean: 首先我们创建一个尽可能简单的书店服务Bean,服务的内容只有一个qryBooksByAuthor,即根据作者(Author) 查询其名下的书籍

(List)。

图 1. 书店服务Bean(BookStoreSrvBean)

服务Input- 作者(Author) 的实体类:

图 2. 作者实体类(Author)

服务出参Output- 书籍(Book) 列表的实体类:

图 3. 书籍实体类(Book)

至此我们的服务代码已经完成,我们不在此讨论此服务的业务合理性,创建此服务的目的只是举一个尽可能简单的实例以分析web 服务的性能。

下面的任务就是开发Web 服务了,手工编写及发布符合规范的 Web 服务过程极为繁琐,在此使用IBM 的Rational Software Architect(后面简称RSA)来进行 Web 服务的服务器端以及客户端的开发。

发布Web 服务

创建动态Web 项目: 发布 Web 服务的前提当然需要一个J2EE 的 Web 项目,打开RSA->File->New->Dynamic Web Project, 项目名称为testWebService, 其余选项根据需要进行选择( 注意需要选择加入Web 项目到EAR)。创建好的 Web 项目和EAR 项目效果如下:

图 4. Web 项目以及应用项目的结构

创建Web 服务:选中导入的com.ibm.test.ws.srv.BookStoreSrvBean,右键New->Other->Web Service 来创建并发布Web 服务。创建的时候选择常用的

JAX-WS 标准, 并选择生成 WSDL 文件。由于 Web 服务的创建不是本文重点,此部分内容暂且省略。服务创建完成之后就可以发布到上一步建好的Web 项目中了。

创建客户端

使用RSA,客户端的创建工作将会非常简单:右键点击上面生成的 WSDL 文件->Web Services->Generate Client

图 5. 创建客户端界面

在此界面,根据实际情况选择server,JAX-WS 标准以及 Client 代码的目标项目,然后点击下一步。

图 6. 输入客户端信息

此界面暂时使用默认配置,某些特殊选项将在后面章节进行描述。

客户端调用

由于JAX-WS 规范大部分的stub 调用代码是实时生成的,我们只需要修改客户端WSDL 的port 就可以用以下代码进行 Web 服务的调用。这里修改 WSDL 端口的目的

是让客户端调用RSA 提供的TCP/IP Monitor 的虚拟端口,这样我们就可以很轻易地看到Web 服务实际的调用以及返回的SOAP 消息了。

客户端调用代码如下:

图7. 客户端调用代码

使用TCP/IP Monitor 看到的SOAP 消息如下:

图8. Web 服务调用产生的SOAP 消息

Java Web 服务性能分析

从以上实例我们可以看到,Web 服务的调用与传统的RPC 还是有较大差异的。最大的特点是调用双方使用XML 格式的SOAP 规范消息进行传输,这样以文本进行传输的好处是抛弃了私有协议,无论调用双方是何种平台,只要能够构造以及解析XML 文本,并且存在双方都支持的传输协议,那么调用就成为了可能。而XML 的日益规范以及HTTP 协议的普及更是给这两个必要条件提供了坚强的后盾,Web 服务成为未来通用的服务提供标准已是不争的事实。

但是相信使用过Web 服务的人都曾经经受过其性能不佳的窘境,原因为何我们结合刚才的实例可以分析出以下几点:

● SOAP 文本消息转化导致效率低下

相关文档
最新文档