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