JAX-RPC vs JAX-WS(二):用JAX-WS 2.0实现高性能的Web服务(续)

news/2024/7/7 21:45:03
      
Primitive Array Performance
就像你在基本类型的例子中所注意到的,那个例子并没有强调绑定层。如果你来回发送的只是基本类型的数据,那么基本类型的性能就被容器的性能隐藏了,比如说连接方面的处理,任务时序的安排,等等。这部分展示了当强调绑定层时基本的数组类型的执行情况。这是一种从容器层移到绑定层的一种放大透镜。( This is a way of moving the magnifying lens from the container layer to the binding layer
考虑下 WSDL Sample 2的代码。
 
 
WSDL Sample 2
 
   
      
   
 
 
...
 
   
   
WSDL Sample 2 中的 WSDL 代码展示了发送跟接收整数类型数组。 Code Sample 2 显示了针对 JAX-RPC1.1 相应的 Web 服务代码。
Code Sample 2
public int[] echoInt(int[] params)
{
      return params;
}
  Code Sample 3 显示了针对 JAX-WS 2.0 而产生的代码。
Code Sample 3
public void echoIntArray(Holder > echoInt)
{
 
}
 Table 2展示了JAX-RPC 1.1跟JAX-WS 2.0之间在服务端点上,对于相应所产生的带有minOccurs和maxOccurs属性的XSD基本类型的不同Java数组类型的区别。
 
Table 2: Comparison of Primitive Arrays Generated in JAX-RPC 1.1 and JAX-WS 2.0 for the Corresponding XSD Types
 
 
XSD Type
JAX-RPC 1.1
JAX-WS 2.0

xsd:boolean
Boolean[]
List
xsd:short
Short[]
List
xsd:int
Int[]
List
xsd:long
Long[]
List
xsd:integer
BigInteger[]
List
xsd:float
Float[]
List
xsd:double
Double[]
List
xsd:decimal
BigDecimal[]
List
xsd:date
Java.util.calendar[]
List
xsd:time
Java.util.calendar[]
List
xsd:datetime
Java.util.calendar[]
List
注意到JAX-RPC 1.1所产生的带有索引的数组,而JAX-WS 2.0产生的是list接口。
图 5中的图表表现出了XSD基本数组类型上的性能。X轴指的XSD基本数组类型比如说元素类型为boolean,short等等的Array(size=100)。Y轴指示了吞吐量,每秒钟的处理事务。
5 : 基本数组类型性能

      
就像你所看到的,一旦你开始强调绑定层了,基本类型的性能就不同了。并且注意下 JAX-WS 2.0 在所有情况下都表现得更好并且可以看出来有很大的提高了――在某些情况下差不多是一倍多――在 date,time, datetime 的情况下。 JAX-RPC 针对 datetime 的锁问题现在在 JAX-WS 2.0 已经被提出了。
5 展示了 JAX-WS 2.0 在性能上的提升。
 
Payload Performance
Web 服务性能是跟发送的有效载荷成正比的。你发送的有效载荷越多,对于序列化及反序列化来说就需要多处理更多的东西,还有绑定及解析。这些对性能上的影响是相当大的。
假设有一种情况,你必须发送并接收带有 Code Sample 4 中所表示的 item 结构的 items 。比如说,在一个供应链管理系统中,你会为了一个特殊的订单而请求 line items 来处理一批 items
Code Sample 4
# Item{
id,
description,
price,
inventory,
# location {
id,
description,
address,
},
creationdate
} ;
  6 中的图表表明了 JAX-WS 的性能跟 JAX-RPC 相比在作为有效负荷大小百分比上――那就是说, items 的数量――种类。 X 轴代表了发送跟接收的取决于 items 数量。在这个问题里 ( 比如说一个 ) ,一个事务被定义为发送与接收一个 itmes 的数组。
6 : Payload Performance
图6中的图表暗示出来了,在负载超过100个items后,JAX-WS的产出是JAX-RPC性能上的差不多两倍,而在负载不多于100个items的时候,JAX-WS和JAX        RPC结果是差不多的。一般来说,JAX-WS比JAX-RPC在更多的负载下表现得比JAX-RPC更好。
 
Binding Performanc
 在Java的web服务中,有多种方式来处理XML文档。这部分比较了 document-handling JAXB Document Oject Model(DOM)c 对于 XML 文档来说,性能上的区别, 100 kilobyte Universal Business Language (UBL) invoice.

JAXB Binding
JAXB绑定提供了一种从Java技术的对象到XML以及从XML到Java技术对象的转换方式。JAXB 绑定的语法在 WSDL Sample 3 中的示例体现了,在这里一个叫做 echoJAXB 的元素在 WSDL 代码的 Schema 部分指的是 InvoiceType 。这种途径也叫 shcema 绑定,因为产性的制品都是依赖于这个 schema
 
WSDL Sample 3
    ...
 
当在 Code Sample 5 中的 WSDL 代码使用 wscomplie 被编绎的时候,它在服务端点产生了 InvoiceType Java 技术的对象。
Code Sample 5
public void echoSX(Holder invoice) {
 
}
 JAXB绑定有几个优点:减轻了开发任务,隐藏了复杂代码,缺少了样板代码,而且比非schema绑定的具有更好的性能。所有开发人员都需要做的就是为访问XML内容而产生JAXB java类方法。
 
JAXB的一个缺点就是所产生的Java代码更加耦合于在WSDL中定义的schema,这使得JAXB绑定的途径对于写基本的代码更加难。
 
DOM Binding
DOM绑定提供了从一棵DOM树到XML和从XML到DODM树的转换。DOM树绑定的语法如 Code Sample 6 所示,在这里一个叫做 echoDOM 的元素在 WSDL Schema 部分有一个 xsd:any 类型,它允许应用程序发送任意的 XML 数据。在 xsd:any 类型上的processContents="skip"属性意思是XML内容是不合法的。 这种方法也叫 nonschema binding 因为所产生的代码是不依赖于 shema 的。
 Sample 4
  
     
        
     
  
  当使用 wscompile 进行编绎时,在 WSDL Sample 4 中的代码就会在服务端点产生 DOM Element ,如 Code Sample 6 所示
code Sample 6
public EchoNSXResponse echoNSX(EchoNSX invoice) {
    Element e = (Element)invoice.getAny();
    EchoNSXResponse res = new EchoNSXResponse();
    res.setAny(e);
    return res;
}
 
 DOM
绑定的优点就是它允许开发人员写更加基础和有可扩展性的程序。 DOM 绑定的缺点就是它需要开发人员依赖于 schema 写更加复杂的代码并且为了遍历一个 DOM 树需要开发人员写更多的模板文件
,这就会导致性能上的降底。 注意 Code Sample 6, 只有那些基础结构的性能被测量了( infrastructural performance is measured )而没有汲及到用户代码或者是业务逻辑上的代码。
在这种使用情况, , a transaction is the sending and receiving of a 100 kilobyte UBL invoice XML document 如图 7 X 轴代表了绑定类型, y 轴代表了吞吐量。注意:图 7 所示的图表是对端点的性能,也就意味着它测量的仅仅是服务器端的 web 服务栈。
7 : 绑定性能
 
 
7 所示的图表说明了 JAXB 绑定比 DOM 绑定表现地更好。而且,注意到 JAX-WS 的性能比 JAX-RPC 的性能好很多 . 另外, JAX-WS 的性能在 DOM 绑定的情况下更有明显。
总结
总的来说:
取决于需求选择基本类型 比如说 digits, precision 的位数,等等――因为基本类型能够基于他们的使用影响到性能。
在负载量增大的情况下将会减少吞吐量,并且会对性能产生相当大的影响。
JAXB 绑定或者是 schema 绑定提供了比 DOM 或者是非 schema 绑定更加好的性能。
JAX-WS 2.0 JAX-RPC1.1 有更加好的绑定性能。
对于大的负载量来说, JAX-WS 2.0 的性能大约是 JAX-RPC 1.1 的两倍。
For More Information
*                   Java API for XML Web Services (JAX-WS) 2.0
*                   Java API for XML-Based RPC (JAX-RPC) 1.1
*                   WSTest Benchmark
*                   GlassFish Java EE Application Server
*                   JAX-WS Project
*                   JAX-RPC Project
*                   JAXB 2.0 Project
 (完)




http://www.niftyadmin.cn/n/3651864.html

相关文章

能强注塑

能强注塑 点击打开链接

JAX-RPC vs JAX-WS(一)简介

JAX-RPC vs JAX-WSIntroduction原文链接:http://www-128.ibm.com/developerworks/webservices/library/ws-tip-jaxwsrpc.htmlJAX-WS 2.0是JAX-RPC 1.1的后续版本。这篇文章介绍一系列这两种编程模型的对比:介绍Web服务已经出现了好长一段时间了。首先有的…

架构师之路

架构师(Architecture)是目前很多软件企业最急需的人才,也是一个软件企业中薪水最高的技术人才。换句话说,架构师是企业的人力资本,与人力资源相比其能够通过架构、创新使企业获得新的产品、新的市场和新的技术体系。那…

理解web服务模式(一):应该采用哪一种 WSDL样式?

RPC/编码、RPC/文字、文档/文字?应该采用哪一种?WSDL 绑定样式可以是RPC 样式或文档样式。用法可以是编码的,也可以是文字的。您如何决定使用哪一种样式/用法的组合呢?本文将帮助您解决这个问题。Web 服务是通过WSDL 文档来描述的…

软件设计模式的非软件例子(二)

结构性模式--处理类与对象的组合作者总结了七个结构型模式,这些模式的例子可以在工具、住宅配线、数学、节日传统、零售目录和银行业中找到。适配器(Adapter)举例适配器模式允许将一个类的接口转换成客户期望的另一个接…

软件设计模式的非软件例子(三)

行为模式--描述类和对象怎样交互和怎样分配职责作者总结了十一种行为模式。这些模式可以在硬币分类银行、餐馆订餐、音乐、运输、汽车修理、自动售货机和家庭建筑中找到例子。职责链(Chain of Responsibility)举例职责链模式使得多…

KMP字符串模式匹配详解

个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很“详细”,耐心地把它看完肯定会有所收获的~~,另外有关模式函数值next[i]确实有很多版本啊,在另外一些面向对象的算法描述书中也…

用简单的实例来实践TDD的核心思想

TDD(Test Driven Development),核心思想就是以测试的方式来驱动开发,它对传统的软件开发流程做了一个有效的调整。TDD的目的主要是为了保证类是为了其所赋予的功能、职责而存在,另一方面也是为了保证避免过度设计&…