2012-11-09 60 views
2

我正在使用Apache Axis向服務發出SOAP請求。我注意到有時,即使該服務現在只是一個簡單的迴應,但需要幾秒鐘才能獲得響應。所以我想知道建立連接是否需要花費時間,即使服務器確實保持HTTP/1.1連接。將SOAP客戶端與Axis重用

應該以某種方式在請求之間重複使用客戶端,或者如果可以爲每個請求獲取一個新客戶端?

這是我的代碼。我應該在請求之間保留locator和/或client,還是可以忘記它?

MyExampleServiceLocator locator = new MyExampleServiceLocator(); 
MyExampleServicePort client = locator.getMyExampleServicePort(url); 
MyExampleRequest request = buildMyExampleRequest(); 
MyExampleResponse response = client.send(request); // This takes time sometimes 

回答

3
  • 對於複雜的服務實例的定位器的成本可能會很高。因此,您應該儘可能地重複使用它。定位器預計是線程安全的,因此您可以將它們用作單例。但請注意,在Axis 1.4中,定位器至少存在一個線程安全問題:AXIS-2498
  • 創建一個新的存根(客戶端)較便宜,但重用存根是沒有問題的。除了以有狀態方式使用存根的場景(例如HTTP會話)之外,它們也應該是線程安全的(至少在Axis 1.4中)。
  • Axis的默認HTTP傳輸僅支持HTTP 1.0,併爲每個請求創建一個新連接。
+0

感謝您的詳細信息。那很完美。 – mprivat

+1

嘿,我在我的多線程ajax1應用程序中遇到了一些併發問題。我想知道你的「重用存根是沒有問題的」,上面評論。我認爲我的問題與我的jms聽衆分享客戶有關,並且根據我所看到的他們不是線程安全的。看這裏:http://mathieuhicauber-java.blogspot.se/2013/05/concurrent-calls-in-axis-14-thread.html – Mathias