java - Web 服务客户端之上的包装器

标签 java web-services client

我有一个返回 Web 服务客户端的库。

客户端c = Clientlib.getclient();

现在我所做的是在它上面创建一个包装器:

public class Myclient {

 private static Client c = ClientLib.getClient(); 
 private static instance = new MyClient();

 public static MyClient getInstance(){
  return instance;
 } 

 private Myclient(){
   //singleton
 }

 public Data getDate(Sting id){
  Data1 d1 = cleint.getData();
  convert d1 to Data and return data
 } 
}

这是正确的方法吗?我应该只创建一次 Client 实例吗?

这种方法会有问题吗?如果两个线程调用 getData 方法会怎样 同时。这种情况很可能发生,因为这是一个基于网络的应用程序。

如果与服务器的连接断开然后又恢复怎么办?我认为这不应该是一个问题,因为 http 是无状态的。

最佳答案

总的来说,我认为包装是个好主意。您可以从 Web 服务重建类,而不会影响其余代码。还允许您执行其他操作,例如缓存、安全性等。

如果您希望 MyClient 成为单例,则 Client c 不需要是静态的。虽然不是什么大事,但值得注意。

是否存在线程问题取决于ClientLib.getClient()的实现。您可能需要阅读一些内容来了解​​是否允许您以多线程方式访问它,或者是否应该证明同步。不过,通过包装客户端,您可以轻松地将访问同步到一处。一般来说,Web 服务应该可以从多个线程访问,它只是通过 http 进行调用。

我唯一可以建议的就是在 MyClient 上添加一个接口(interface),以解耦任何使用此类的内容。使测试变得更容易。

关于java - Web 服务客户端之上的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665843/

相关文章:

java - 在服务器上运行 spring boot

java - 具有本地数据库的小型 Java 应用程序?使用哪个数据库?

java - 为什么不允许抽象构造函数?

java - (Java) 同时发布 Web Service Endpoint 和 Http Server?

java - 无法测试服务器上部署的 Web 服务

java - 在JDK 1.6上开发webservice客户端,需要兼容JDK 1.5.03

android - 如何使用 Scarlet 在 Android 上通过 WebSocket 进行连接?

java - 多个服务器同时也是客户端 - JAVA 中的通信

java - quartz : Multiple Jobs that share a resource

java - 实例化新对象与实现 reset() 方法