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所示的图表说明了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
(完)
分享到:
相关推荐
8. **异步调用:**JAX-WS 2.0支持异步调用模式,允许客户端以非阻塞的方式调用Web服务,提高了应用程序的性能和可扩展性。 **JAX-WS 2.0的实现:** JAX-WS 2.0 API通常由Java EE服务器提供实现,例如Sun的Metro或...
- JAX-WS是JAX-RPC的后续版本,它在设计上更注重简洁性和性能,且更符合现代Web服务标准。 总的来说,JAX-WS API是Java开发SOAP Web服务的核心工具,提供了高效、易于使用的API来创建和调用Web服务。`jaxws-api-...
在实际应用中,使用JAX-WS进行Web服务开发时,开发者需要定义服务接口和实现,然后通过注解或部署描述符来配置服务。服务可以通过HTTP协议暴露,客户端则可以通过生成的Stub类或者使用JAX-WS的`Service`类来调用这些...
需要注意的是,虽然JAX-RPC在早期的Web服务开发中发挥了重要作用,但它已经被更现代的规范如JAX-WS所取代,JAX-WS提供了更强大和灵活的Web服务开发能力,支持注解和更丰富的数据绑定。然而,理解JAX-RPC的基本原理...
**J2EE Web服务:XML、SOAP、WSDL、UDDI、WS-I、JAX-RPC、JAXR、SAAJ、JAXP详解** 在IT领域,尤其是在Java企业级应用开发中,Web服务扮演着至关重要的角色。J2EE(Java 2 Platform, Enterprise Edition)提供了一...
JAX-WS(Java API for XML Web Services)2.0 是一种用于创建和访问 Web 服务的标准 Java API,它允许开发人员使用 Java 编写 Web 服务,并以 XML 的形式进行数据交换。JAX-WS 2.0 由 Java 社区进程 (JCP) 通过 JSR-...
JAX-WS(Java API for XML Web Services)2.0,由JSR 224定义,是Java EE 5平台的关键组成部分,它是JAX-RPC 1.1的升级版。JAX-WS的主要目标是简化基于XML的Web服务的开发任务,它提供了对SOAP 1.1和1.2,以及XML等...
【标题】:Web服务之Java API for XML Web Services (JAX-WS) 【内容详解】 JAX-WS,全称为Java API for XML Web Services,是Java平台上的一个标准,用于构建和部署基于SOAP(Simple Object Access Protocol)的...
JAX-WS是Sun Microsystems在J2EE 5.0中引入的,目的是简化Web服务的开发过程,取代了之前的JAX-RPC(Java API for XML-based Remote Procedure Calls)。JAX-WS通过使用WSDL(Web服务描述语言)来定义服务接口,使得...
1. **编码和解码**:JAX-RPC将Java对象转换为XML消息,反之亦然,使得Web服务可以与各种不同的客户端通信,不论它们是使用何种技术实现的。 2. **服务端实现**:开发者可以使用JAX-RPC定义服务接口,并创建其实现。...
Java API for XML Web Services(JAX-WS)是Java平台上的一个标准,用于构建和部署Web服务。它简化了Web服务的开发,使得开发者能够使用Java编程语言来创建、调用和部署SOAP(Simple Object Access Protocol)服务。...
**描述分析:** 描述提到“tomcat+webservice实现简单的web服务远程调用接口,所需的jar”,这暗示了在Apache Tomcat服务器上,我们将会使用JAX-WS来构建一个可以通过网络调用的Web服务接口。"所需的jar"是指为了...
在这个“webservice Demo注解+jax-ws”示例中,我们将深入探讨Web服务的注解使用以及基于Java API for XML Web Services (JAX-WS)的实现。 首先,让我们了解一下JAX-WS。它是Java平台的标准组件,用于创建和处理Web...
总的来说,JAX-WS为Java开发者提供了一种方便的方式来创建、部署和使用Web服务。通过理解这些核心概念,你可以有效地利用JAX-WS在不同系统之间建立通信桥梁。如果你想要深入了解或实践,可以参考给出的博客链接,...
JAX-WS 2.0引入了一种新的编程模型,使得开发Web服务更为简洁。它利用注解(Annotations)来简化服务接口的定义,通过JAXB进行数据绑定,将Java对象和XML消息自动转换。此外,JAX-WS还支持SOAP消息头(SOAP Headers...
这个"jax-ws WebService客户端与服务端工程.rar"压缩包文件包含了一个完整的示例,展示了如何使用JAX-WS创建和消费Web服务。让我们深入探讨一下JAX-WS的核心概念和技术。 1. **Web服务基础**: - **SOAP(Simple ...
1. **Java API for XML-Based RPC (JAX-RPC)**:这是一种早期的技术,定义了如何使用SOAP 1.1来构建Java Web服务(JSR 101)。虽然JAX-WS取代了JAX-RPC,但了解这一背景有助于理解JAX-WS的发展历程。 2. **Java ...
- **实现细节**:书中详细介绍了如何使用JAX-WS开发具体的Web服务接口和服务端实现,以及如何利用wsimport工具生成客户端代码。 **5. 实战案例分析** - **案例选取**:本书包含了一系列实用案例,涵盖了各种典型...
JAX-WS(Java API for XML Web Services)是Java平台上用于构建和消费Web服务的标准API,它取代了早期的JAX-RPC。本篇将详细介绍如何在MyEclipse6_5集成开发环境中使用JAX-WS来开发Web服务。 首先,让我们了解...
它是JAX-RPC的后继者,提供了一种更简洁的方式来实现Web服务,与之前的版本相比,它使用了基于注解的编程模型,并与Java 5及更高版本兼容。JAX-WS支持SOAP协议,是构建SOAP消息的一种机制,也可以处理HTTP绑定以及...