2012-03-10 75 views
3

我已经写了一个使用spring,cxf和jax ws实现的web服务,并且我有一个关于WS的基本问题。 Web Service端点如何处理并发请求?它是否为类似于servlet的每个请求创建了一个新线程,或者它是否为单线程模型?由于我们预计每个Web服务的体积都很大,对于将WSDL简化为多个WSDL以具有不同的端点,是否有任何区别?通过jax ws实现的web服务是多线程

回答

1

从客户和服务的角度来看,没有“多线程”这样的东西。你的客户调用一个请求,并得到一个响应(可能是一个错误响应)。您的服务器收到一个请求,并为该请求提供服务。期。

如何调度请求是一个实现细节。

而WSDL只是一个“契约”。该服务“发布”它支持的操作以及它与WSDL一起使用的数据类型;客户端打包并解包他的请求并相应地响应SOAP消息。但是WSDL在任何给定的Web服务调用中都没有直接的作用。

+0

谢谢为答复。您提到该服务器接收方请求并返回响应。终点在服务响应中扮演什么角色?它如何处理并发请求。 – Mr9 2012-03-10 06:11:38

+2

Web服务端点的情况与JSP servlet ...或任何其他Web请求/响应完全相同。从您的服务角度来看,您不知道或关心侦听器是否将您的请求分派给新线程,新进程或全新的JVM。或者如果它阻止。从你的角度来看,没有“多线程”。但是,从*服务器*的角度来看,它可能会创建一个新线程。不同服务器的具体情况会有所不同(例如Tomcat vs JBoss vs WebSphere vs WebLogic--它们都可能以不同的方式实现其调度程序)。 – paulsm4 2012-03-10 17:22:44

+1

@ paulsm4我希望你能分享一个参考链接来支持你在这里分享的信息。 .i一直在寻找能够显示Web服务生命周期的东西(例如,您可以在Oracle JEE5教程中轻松找到无状态会话bean生命周期),但找不到任何... – 2012-07-14 18:19:41

3

Web服务当然是由Web服务器(例如Glassfish)托管的,它在接收多个同时请求时是多线程的。

0

它的后期,但可能会有所帮助。

Endpoint.publish(Url,ServiceImplObj)在给定的URL处发布web服务。没有。分配给请求处理的线程真正处于jvm的控制之下,因为这是由jvm本身处理的轻量级部署。

为了更好的阐明,您可以在服务端打印当前线程名称,您可以看到服务线程正在由jvm管理的线程池中分配。

[pool-1-thread-1]: Response[57]: 
[pool-1-thread-5]: Response[58]: 
[pool-1-thread-4]: Response[59]: 
[pool-1-thread-3]: Response[60]: 
[pool-1-thread-6]: Response[61]: 
[pool-1-thread-6]: Response[62]: 

这个我试过jdk 1.6.0_35。

XJC -version XJC版 “JAXB 2.1.10在JDK 6” 的JavaTM架构XML绑定(JAXB)参考实现(在JDK 6建造JAXB 2.1.10)