/** * This method returns a listenable future. The listeners will be called on completion of the future. * The listeners will be executed by the same thread that completes the future. * * @param <T> the result of the future * @return a listenable future */ public static <T> PlainListenableActionFuture<T> newListenableFuture() { return new PlainListenableActionFuture<>(); }
private void executeListener(final ActionListener<T> listener) { try { // we use a timeout of 0 to by pass assertion forbidding to call actionGet() (blocking) on a network thread. // here we know we will never block listener.onResponse(actionGet(0)); } catch (Exception e) { listener.onFailure(e); } }
@Override public void addListener(final ActionListener<T> listener) { super.addListener(new ThreadedActionListener<>(logger, threadPool, ThreadPool.Names.LISTENER, listener, false)); } }
@Override protected void done() { super.done(); synchronized (this) { executedListeners = true; } Object listeners = this.listeners; if (listeners != null) { if (listeners instanceof List) { List list = (List) listeners; for (Object listener : list) { executeListener((ActionListener<T>) listener); } } else { executeListener((ActionListener<T>) listeners); } } }
@Override public void addListener(final ActionListener<T> listener) { internalAddListener(listener); }
private void internalAddListener(ActionListener<T> listener) { boolean executeImmediate = false; synchronized (this) { if (executedListeners) { executeImmediate = true; } else { Object listeners = this.listeners; if (listeners == null) { listeners = listener; } else if (listeners instanceof List) { ((List) this.listeners).add(listener); } else { Object orig = listeners; listeners = new ArrayList<>(2); ((List) listeners).add(orig); ((List) listeners).add(listener); } this.listeners = listeners; } } if (executeImmediate) { executeListener(listener); } }
@Override public void addListener(final ActionListener<T> listener) { internalAddListener(listener); }
/** * This method returns a listenable future. The listeners will be called on completion of the future. * The listeners will be executed by the same thread that completes the future. * * @param <T> the result of the future * @return a listenable future */ public static <T> PlainListenableActionFuture<T> newListenableFuture() { return new PlainListenableActionFuture<>(); }
@Override protected void done() { super.done(); synchronized (this) { executedListeners = true; } Object listeners = this.listeners; if (listeners != null) { if (listeners instanceof List) { List list = (List) listeners; for (Object listener : list) { executeListener((ActionListener<T>) listener); } } else { executeListener((ActionListener<T>) listeners); } } }
@Override public void addListener(final ActionListener<T> listener) { super.addListener(new ThreadedActionListener<>(logger, threadPool, ThreadPool.Names.LISTENER, listener, false)); } }
private void executeListener(final ActionListener<T> listener) { try { // we use a timeout of 0 to by pass assertion forbidding to call actionGet() (blocking) on a network thread. // here we know we will never block listener.onResponse(actionGet(0)); } catch (Exception e) { listener.onFailure(e); } }
@Override public void addListener(final ActionListener<T> listener) { internalAddListener(listener); }
/** * This method returns a listenable future. The listeners will be called on completion of the future. * The listeners will be executed by the same thread that completes the future. * * @param <T> the result of the future * @return a listenable future */ public static <T> PlainListenableActionFuture<T> newListenableFuture() { return new PlainListenableActionFuture<>(); }
@Override protected void done() { super.done(); synchronized (this) { executedListeners = true; } Object listeners = this.listeners; if (listeners != null) { if (listeners instanceof List) { List list = (List) listeners; for (Object listener : list) { executeListener((ActionListener<T>) listener); } } else { executeListener((ActionListener<T>) listeners); } } }
@Override public void addListener(final ActionListener<T> listener) { super.addListener(new ThreadedActionListener<>(logger, threadPool, ThreadPool.Names.LISTENER, listener, false)); } }
private void executeListener(final ActionListener<T> listener) { try { // we use a timeout of 0 to by pass assertion forbidding to call actionGet() (blocking) on a network thread. // here we know we will never block listener.onResponse(actionGet(0)); } catch (Exception e) { listener.onFailure(e); } }
public ListenableActionFuture<Response> execute() { PlainListenableActionFuture<Response> future = new PlainListenableActionFuture<>(threadPool); execute(future); return future; }
private void internalAddListener(ActionListener<T> listener) { boolean executeImmediate = false; synchronized (this) { if (executedListeners) { executeImmediate = true; } else { Object listeners = this.listeners; if (listeners == null) { listeners = listener; } else if (listeners instanceof List) { ((List) this.listeners).add(listener); } else { Object orig = listeners; listeners = new ArrayList<>(2); ((List) listeners).add(orig); ((List) listeners).add(listener); } this.listeners = listeners; } } if (executeImmediate) { executeListener(listener); } }
public ListenableActionFuture<Response> execute() { PlainListenableActionFuture<Response> future = new PlainListenableActionFuture<>(threadPool); execute(future); return future; }
private void internalAddListener(ActionListener<T> listener) { boolean executeImmediate = false; synchronized (this) { if (executedListeners) { executeImmediate = true; } else { Object listeners = this.listeners; if (listeners == null) { listeners = listener; } else if (listeners instanceof List) { ((List) this.listeners).add(listener); } else { Object orig = listeners; listeners = new ArrayList<>(2); ((List) listeners).add(orig); ((List) listeners).add(listener); } this.listeners = listeners; } } if (executeImmediate) { executeListener(listener); } }