0
我有一个servlet使用http get从另一个服务器请求地理位置。响应是通过来自其他服务器的回调接收的,并在另一个servlet中结束。理想情况下,我想在第一个servlet上返回一个映射,并使这个异步机制同步。我现在所能想出的就是轮询一个共享的hashmap,直到这个值出现为止,这看起来有点像一个丑陋的黑客。任何想法如何我可以更优雅地实现这一点?如何处理java中的回调
我有一个servlet使用http get从另一个服务器请求地理位置。响应是通过来自其他服务器的回调接收的,并在另一个servlet中结束。理想情况下,我想在第一个servlet上返回一个映射,并使这个异步机制同步。我现在所能想出的就是轮询一个共享的hashmap,直到这个值出现为止,这看起来有点像一个丑陋的黑客。任何想法如何我可以更优雅地实现这一点?如何处理java中的回调
在最基本的层面上,使用条件变量比无阻塞循环更有效。
// global, shared lock.
final Lock lock = new ReentrantLock();
final Condition locationReceived = lock.newCondition();
// first servlet:
//
lock.lock();
try {
requestLocation();
if (!locationReceived.await(10, TimeUnit.SECONDS)) {
// location was not received in the timeout.
} else {
// read location from shared object.
}
} finally {
lock.unlock();
}
// servlet that receives geolocation
//
lock.lock();
try {
// set location in shared object.
locationReceived.signal();
} finally {
lock.unlock();
}
如果您使用的是Servlet 3,那么您可以检查如何执行[异步处理](http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3。 HTML)。 – 2010-12-09 09:17:40
就servlet 3而言,异步处理部分不是问题。问题在于请求是在一个servlet中生成的,而在另一个servlet中的响应需要被馈送到原始的servlet中。 – Wayne 2010-12-15 20:13:25