私は "EJB
"を呼び出し、4 Asynchronous
EJB
を呼び出し、5秒間実行する必要があります。 5秒後、 "クライアント" EJBは実行を終了したFuture
オブジェクトから準備完了の結果を収集し、出力を返します。非同期EJBのために最大X秒待っています
私はクライアント側で「待機中」に問題があります。私は起動しようとしましたfuture.get(5, TimeUnit.MILLISECONDS)
時々asyncと思われるEJB
s タイムアウト後に実行を開始します。 正しい方法がありますか?
1)Map
でFuture
オブジェクトを収集します。
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;
2)その後、私はFuture
オブジェクト
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;
}
からタイムアウトで出力を得る私はあなたのクライアントを考えていないあなたに
私のクライアントは長い実行を待つことを望んでいません。つまり、実行を開始しなかったサービスを待つべきではありません。 – lili
future.get(timeout)を呼び出し、タイムアウトの一部を待ちます。次回はタイムアウトを計算すると時間が少なくなります(実行するまでにどれくらいの時間が残っているか確認してください) – lili
>実行にどれだけの時間が残っているか確認してください - あなたは正しいです、愚かな私 –