在REST服务中创建Jersey客户端

时间:2014-02-12 11:15:47

标签: java web-services rest servlets design-patterns

我正在创建一个使用其他http REST服务的http REST服务。

我正在使用Jersey客户端来调用其他服务,我很怀疑http客户端的哪种创建模式是最好的。

目前我正在使用EJB注入每个方法共享的Singleton客户端,但我想删除java ee依赖项并将Jetty用作嵌入式应用程序服务器。

我从the doc看到客户端创建是一项昂贵的操作,所以每次我需要它时都无法创建。

我认为在每个Servlet / Rest类的构造函数中创建1是更简单的解决方案,但我不确定servlet的生命周期(如果为每个请求创建一个实例,这个方法与前)

或者最好是创建每个Servlet / Rest类共享的Singleton

或者更好的是N客户端池。

关于最后两个解决方案,我需要一些建议......您认为这是更好的解决方案吗?

由于

1 个答案:

答案 0 :(得分:0)

根据您的说法,在某些环境中部署了REST Service,并且有一个应用程序clientconsumer,它希望访问该服务。

如果我使用Jersey 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,它在您的应用程序中执行某些已定义的作业,并且每次访问{{1}时,它都会使用客户端代码块调用REST Service它每次都会创建一个servlet的实例。

如果你想避免这种情况,那么你可以创建一个初始类,它将创建com.sun.jersey.api.client.Client的实例,只有一个,并使其成为静态,并在任何你想要的地方使用相同的引用。应在需要时创建com.sun.jersey.api.client.Client,因为您可能有兴趣拨打不同的WebResource

如果我在你的情况下,我会遵循这种方法。