2012-03-10 51 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)