我有这样的情况:
具有以抽象类作为参数的方法的第三方库:
在服务器端我可以调用这个第三方方法
public void save(){
ThirdParty.doSomethingBackground(new Callback() {
public void done(Exception e) {
//SOMETHING TO DO
}
});
}
我可以在客户端上调用此方法,执行以下操作:
ServerSide.save() 并传递我的 CallBack 实现,但我不想从客户端看到第三方库,当我更改第三方库时,我需要对这种情况进行透明处理。
这样做的最佳做法是什么?
谢谢
最佳答案
创建一个自定义中间对象,其中包含创建自定义回调实现所需的所有信息。它类似于一个简单的 DTO。如果您使用某种远程处理,那么该对象将是可序列化的。
将此中间对象从客户端传递到服务器。在服务器上,在调用第三方之前将中间对象转换为回调实现。
从您的问题中不清楚您的第三方库调用是否是异步的。如果您希望 ServerSide.save 调用是同步的,而 ThirdParty 库调用是异步的,那么您需要阻止服务器线程并在返回之前等待 ThirdParty 结果。一种方法是使用 Java 6/7 的 FutureTask类。
如果您不希望 ServerSide.save 调用同步,那么您需要让客户端轮询服务器以在另一个服务器调用中查找结果,或者设计双向通信。不过,双向通信通常要复杂得多,并且严重依赖于您所使用的平台/协议(protocol)/技术。
关于java - 从客户端调用实现线程事件的服务器端应用程序的方法的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192257/