Java webservice客户端顶部的包装器
我有一个返回webservice客户端的库 Client c=Clientlib.getclient() 现在我做的是在它上面创建一个包装:Java webservice客户端顶部的包装器,java,web-services,client,Java,Web Services,Client,我有一个返回webservice客户端的库 Client c=Clientlib.getclient() 现在我做的是在它上面创建一个包装: public class Myclient { private static Client c = ClientLib.getClient(); private static instance = new MyClient(); public static MyClient getInstance(){ return instance;
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
}
}
这是正确的方法吗?我应该只创建一个客户端的实例吗
这种方法会有问题吗?如果两个线程调用getData
方法呢
同时这种情况很可能是因为这是一个基于web的应用程序
如果与服务器的连接断开并恢复,该怎么办?我认为这不应该是个问题,因为http是无状态的。一般来说,我认为包装器是个好主意。您可以从webservice重建类,而不影响其余代码。还允许您执行缓存、安全性等其他操作
如果您打算将MyClient作为一个单例,那么Client c不需要是静态的。这不是一件大事,但值得一提
是否存在线程问题取决于ClientLib.getClient()的实现。您可能需要进行一些阅读,以了解是否允许以多线程方式访问它,或者是否应该验证同步。不过,通过包装客户端,您可以轻松地在一个位置同步访问。一般来说,Web服务应该可以从多个线程访问,它只是通过http进行的调用
我唯一能建议的另一件事是在MyClient上添加一个接口,以解耦使用该类的任何东西。使测试更加容易。:感谢您的回复。我还有一个相关的问题。我有很多Web服务,每个服务提供不同类型的数据。因此每个包装器获取数据返回不同的bean。而且不同包装器的每个gedata接受不同类型的参数和不同数量的参数。因此我认为在base中提供抽象方法和每个包装器覆盖没有意义你能给出你的建议吗?不,我不认为一个简单的基类对你有任何好处。在编写代码时,您可能会看到值得考虑的常见问题。