class AsyncRunner {

    public static <RESULT> Future<AsyncResult<RESULT>> submit(Callback<RESULT> callback, Callable<RESULT> task) {
        if (executor == null) {
            executor = new DefaultAsyncExecutor();
            LOGGER.log(Level.INFO, "AsyncExecutor was not set, default executor {0} will be used.",
                       executor.getClass().getSimpleName());
        }

        return executor.submit(callback, task);
    }

    private  AsyncRunner();

}