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

      
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
 
<xsd:complexType name="intArray">
    <xsd:sequence>
       <xsd:element minOccurs="0" maxOccurs="unbounded" ref="types:echoInt"/>
    </xsd:sequence>
</xsd:complexType>
 
<xsd:element type="types:intArray" name="echoIntArray" />
<xsd:element type="types:intArray" name="echoIntArrayResponse" />
 
...
 
<message name="echoIntArraySoapIn">
    <part name="params" element="types:echoIntArray" />
</message>
<message name="echoIntArraySoapOut">
    <part name="result" element="types:echoIntArrayResponse" />
</message>
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<List<Integer>> 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<Boolean>
xsd:short
Short[]
List<Short>
xsd:int
Int[]
List<Integer>
xsd:long
Long[]
List<Long>
xsd:integer
BigInteger[]
List<BigInteger>
xsd:float
Float[]
List<Float>
xsd:double
Double[]
List<Double>
xsd:decimal
BigDecimal[]
List<BigDecimal>
xsd:date
Java.util.calendar[]
List<Javax.xml.datatype.XMLGregorianCalendar>
xsd:time
Java.util.calendar[]
List<Javax.xml.datatype.XMLGregorianCalendar>
xsd:datetime
Java.util.calendar[]
List<Javax.xml.datatype.XMLGregorianCalendar>
注意到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
<xsd:element name="InvoiceType">
    ...
</xsd:element>
<xsd:element name="echoJAXB" type="types:InvoiceType" />
 
当在 Code Sample 5 中的 WSDL 代码使用 wscomplie 被编绎的时候,它在服务端点产生了 InvoiceType Java 技术的对象。
Code Sample 5
public void echoSX(Holder<InvoiceType> 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
<xsd:element name="echoDOM">
   <xsd:complexType>
      <xsd:sequence>
         <xsd:any processContents="skip" />
      </xsd:sequence>
   </xsd:complexType>
</xsd:element>
  当使用 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
 (完)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值