@Override public <T> Future<T> submitCallable(final Callable<T> callable, final IFinishedExecution<T> callback, final Map<Object, Object> threadBindings) { return getExecutorService().submit(() -> { try { if (threadBindings != null) { ThreadContext.setResources(threadBindings); } final T result = callable.call(); callback.onComplete(result); return result; } catch (Throwable t) { log.error(t.getLocalizedMessage(), t); callback.onFailure(t); return null; } finally { ThreadContext.remove(); } }); }