EJB
私は4秒を呼び出す「クライアント」を持っており、Asynchronous
EJB
実行するのに5秒すべてを与える必要があります。5 秒後、「クライアント」EJB は、Future
実行を終了したオブジェクトから準備完了の結果を収集し、出力を返します。
クライアント部分の「待機」に問題があります。タイムアウト後にfuture.get(5, TimeUnit.MILLISECONDS)
async が実行されることがあるようEJB
です。それを行う正しい方法はありますか?
Future
1)でオブジェクトを収集しMap
ます。
Map<String, Future> futureMap = new HashMap<String, Future>();
for (String userID: users) {
Future<Set<FrontPageData>> test = util.asyncGetData(userID);
futureMap.put(serviceID, test);
}
return futureMap;
Future
2)次に、オブジェクトからタイムアウトで出力を取得します
final long now = Calendar.getInstance().getTimeInMillis();
final long end = now + TimeUnit.SECONDS.toMillis(5)
Map<String, Object> output = new HashMap<String, Object>();
Object data;
for (String userID: futureMap.keySet()) {
Future future= futureMap.get(userID);
try {
//check how much time left till the end
long timeout = end - Calendar.getInstance().getTimeInMillis();
data = future.get(timeout, TimeUnit.MILLISECONDS);
output.put(userID, data);
} catch (Exception e) {//write to logs
}
}
return output;
}
ありがとうございました