在JAX-WS參考實現(Metro)中,創建JavaWebService
並不昂貴(在我們生成的客戶端中,我們傾向於發現這需要大約20ms)。
SomePort
的第一個創建非常昂貴(對我們來說大約200ms);在同一個JavaWebService
實例上對getSomePort()
的後續調用要快得多(對我們來說大約爲3ms)。
因此,每次創建JavaWebService
需要獲得SomePort
的實現都會帶來一定程度的費用。總之,這個問題的答案是「相當昂貴」。
但是,即使SomePort
上的方法不是線程安全的,JavaWebService
上的方法也是如此。因此,明智的使用模式(至少在Metro-thread-safety由於某種程度上缺乏規範而特定於實現)是重用JavaWebService
,因爲您只會招致昂貴的getSomePort()
調用一次。
更新
這符合兩個職位由Andreas Leow如是從Oracle德國僱員,由@PapaLazarou在下面的評論中引用的線程,誰寫關於Service
對象海報之一,
您可以爲每個WSDL只是一個單一的靜態Service
例如:任何單一Service
對象是線程安全的,並且可以通過儘可能多的併發線程,只要你喜歡共享。
和有關端口的使用情況,
雖然我幾乎可以100%肯定,CXF的JAX-WS端口是線程安全的,地鐵的Port
對象絕對是不線程安全的。
你有參考嗎?到目前爲止,我能找到的所有帖子都是返回的端口不是線程安全的,CXF的頁面說「客戶端」(我假設它們是指端口)不是線程安全的。我正在尋求的是一些*官方的聲明,表示Metro服務(而不是端口)是線程安全的,特別是對'getPort'的調用返回單獨的實例。 –
我發現了一些由Metro開發者發佈的帖子,表明這一點,但一直在努力尋找他們。我最近設法查找的唯一帖子是[this](http://metro.1045641.n5.nabble.com/JAX-WS-clients-td5709817.html)。僅供參考,我的獨立併發測試也表明這是事實。 – PapaLazarou