ExecutorService создает исключение NullPointerException при запуске JBoss - PullRequest
0 голосов
/ 13 июня 2019

Я хочу использовать API ManagedScheduledExecutorService из Java EE 7 для динамического выполнения фоновых задач в моем веб-приложении JSF Java EE.

В данный момент я застрял в точке, когда помещать фонзадачи в ManagedScheduledExecutorService.

Я уже попробовал 3 различных решения, все они выполняются во время развертывания войны, а не во время запуска JBoss.Проблема в том, что ManagedScheduledExecutorService, вероятно, недоступен во время развертывания веб-приложения, и я получаю только исключение NullPointerException.

У вас есть идея, как планировать фоновую задачу после завершения запуска jboss, а не после развертывания приложения.


Вот мои 3 решения, которые я пробовал - все заканчивалось выполнением до завершения запуска JBoss.

Первое решение:

Класс, аннотированный @Singleton и@Startup и 2 метода с помощью @PostConstruct или @ PreDestroy

Второе решение:

Класс, реализующий ServletContextListener и аннотированный с помощью @WebListener и 2 методов contextDestroyed и contextInitialized из интерфейса

Третье решение:

Класс с 2 методами public void init (@Observed @Initialized (ApplicationScoped.class) Object o) и public void destroy (@Observed @Destroyed (ApplicationScoped.class) Объект o)


Код, тыс. Грнat используется для инициализации фоновых задач в ExecutorService:

@Resource
private ManagedScheduledExecutorService executorService;
private List<ScheduledFuture<?>> scheduledTasks;

public void init(@Observes @Initialized(ApplicationScoped.class) Object o) {

    this.scheduledTasks = Collections.synchronizedList(new ArrayList<ScheduledFuture<?>>());

    ScheduledFuture<Boolean> task = executorService.schedule(() -> {
        try {
            //Do work
            return true;
        } catch (Exception e) {
            //Log error
            return false;
        }
    }, new Trigger() {
        @Override
        public Date getNextRunTime(LastExecution le, Date date) {
            return getNextDate(10);
        }

        @Override
        public boolean skipRun(LastExecution le, Date date) {
            return false;
        }
    });
    scheduledTasks.add(task);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...