2014-02-12 37 views
1

我正在創建一個使用其他http REST服務的http REST服務。在REST服務中創建Jersey客戶端

我正在使用Jersey客戶端來調用其他服務,我對http客戶端的哪種創建模式是最好的有很多疑問。

當前我正在使用EJB注入每個方法共享的Singleton的客戶端,但是我想刪除java ee依賴項並將Jetty用作嵌入式應用程序服務器。

我從the doc看到客戶端創建是一個昂貴的操作,所以我不能每次創建一個我需要它。

我想在每個Servlet/Rest類的構造函數中創建1是更簡單的解決方案,但我不確定該servlet的生命週期(如果爲每個請求創建實例,則此方法與以前)

或者,也許是更好地創造每隔的Servlet /休閒類共享

或者,也許更好ň客戶池一個Singleton。

關於這最後兩個解決方案,我需要一些建議......你認爲這是更好的解決方案?

感謝

+0

我對目前的答案並不是很滿意,因爲他們解釋瞭如何做,但問題更多的是哪個更好的選擇 –

回答

0

根據你,有部署在一些環境中REST Service並有一個應用程序,clientconsumer,它希望訪問該服務。

如果我使用澤西API編寫一個正常Java class作爲客戶端,那麼我會寫些石灰這樣的:

import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.ClientResponse; 
import com.sun.jersey.api.client.WebResource; 

Client client = Client.create(); 
WebResource webResource = client 
     .resource("http://localhost:8080/rest/example/employees"); 

ClientResponse response = webResource.accept("application/json") 
       .get(ClientResponse.class); 
String result = response.getEntity(String.class); 

現在說你正在編寫一個servlet,其中做了一些定義的作業在你的應用程序,也它使用客戶端代碼塊撥打REST Service,每次訪問servlet時,它將每次創建一個com.sun.jersey.api.client.Client的實例。

如果你想避免這種情況,那麼你可以創建一個將創造com.sun.jersey.api.client.Client,且只有一個實例,並使其靜態和使用任何你想去的地方相同的參考起始類。應根據需要創建WebResource,因爲您可能有興趣調用不同的URIs

我會按照這種方法,如果我在你的情況。