Мне нужен класс как ejb без сохранения состояния с асинхронным методом, но в основном классе мне нужно вызвать один или несколько раз и затем ожидать его завершения без блокировки.Например, я использую @Asynchronus и возвращаю Future, когда он завершится. Я хочу, чтобы в основном потоке вызовов ожидали завершения, поэтому я должен использовать get () для результата (Future), но я не хочу использовать get () ..Я не хочу использовать решения Java 8, такие как CompletableFuture, поэтому я думаю использовать класс обратного вызова.Может быть, с защелкой CountDown, чтобы подождать всех вызванных «потоков», если мне придется вызывать этот метод дважды или более раз.Знаете ли вы, что мое решение, как указано выше, может быть в порядке с JDK7 и JEE6?
@Singleton
@Startup
public class PreapreTaskRunningAsync {
@EJB
MyAsyncEJB myAsyncEJB;
@Lock(LockType.READ)
public void startTask(){
myAsyncEJB.getSomethingAsyc(new CallBackFuture());
}
final class CallBackFuture implements CallBack<String>{
@Override
public void oncomplete(Throwable t, String result) {
if ( t != null ) {
t.printStackTrace();
System.out.println("Exception! " + result);
}
System.out.println(result);
}
}
interface CallBack<T> {
void oncomplete(Throwable t, T result);
}
@Stateless
public class MyAsyncEJB {
@Asynchronous
public void getSomethingAsyc(PreapreTaskRunningAsync.CallBackFuture stringCallBackFuture){
try {
Thread.sleep(3000);
stringCallBackFuture.oncomplete(null, "DONE!");
} catch (InterruptedException e) {
e.printStackTrace();
stringCallBackFuture.oncomplete(e, "ERROR!");
}
}
}
Спасибо!Roby