Интерфейс TaskExecutor
является интерфейсом «забей и забудь», который используется, когда вам все равно, когда задача завершится. Это самая простая асинхронная абстракция, которую предлагает Spring.
Тем не менее, существует расширенный интерфейс, AsyncTaskExecutor
, который предоставляет дополнительные методы, включая submit()
методы, которые возвращают Future
, что позволяет вам ждать результата.
Spring предоставляет класс ThreadPoolTaskExecutor
, который реализует как TaskExecutor
, так и AsyncTaskExecutor
.
В вашем конкретном случае я бы повторно реализовал Runnable
как Callable
и возвратил бы commandResults
из метода Callable.call()
. Затем метод getCommandResults
можно переопределить следующим образом:
public List getCommandResults(String command) {
Future> futureResults = taskExecutor.submit(new CommandTask(command));
return futureResults.get();
}
Этот метод отправит задачу асинхронно, а затем дождется ее завершения, прежде чем вернуть результаты, возвращенные методом Callable.call()
. Это также позволяет вам избавиться от поля commandResults
.
Не совсем, потому что вам нужен контейнер времени выполнения Equinox. вы можете запустить плагин, используя исполняемый файл eclipse, а в качестве приложения см.
http://wiki.eclipse.org/FAQ_How_do_I_create_an_application%3F
Фактически вы создаете org.eclipse. core.runtime.applications
точка расширения.
Вы также можете опубликовать плагин как часть приложения Eclipse, а затем экспортировать его как исполняемый файл, чтобы его можно было запускать отдельно от Eclipse. Тем не менее, это по-прежнему связывает среду выполнения Equinox и плагин.
В конечном итоге плагины по-прежнему представляют собой Java-код. Будет ли ваш плагин работать за пределами Eclipse, зависит от его зависимостей. Если ваши пакеты больше ориентированы на OSGi, вы, вероятно, можете работать на другой платформе, например Felix .
Если вы будете осторожны, вы можете работать полностью вне OSGi. Например, реестр Equinox может работать автономно вне OSGi. (См. эту страницу тестирования , «Часть IV. Автономный запуск реестра»)