Как реализовать постоянный фоновый процесс с EJB? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть вопрос об общем шаблоне проектирования в EJB. У меня есть приложение Java EE (EJB и Web), и мне нужен своего рода фоновый процесс, который постоянно сканирует и обрабатывает определенные данные с помощью JPA.

Одним из решений, я думаю, является реализация @Singleton EJB. В методе, аннотированном @PostConstruct, я могу запустить свой процесс.

@Singleton
@Startup
public class MyUpdateService {
    @PostConstruct
    void init() {
        while(true) {
            // scann for new data...
            // do the job.....
        }
    }
}

Но это рекомендуемый шаблон? Или есть лучший способ запустить такой класс в контейнере EJB?

В EJB есть другие шаблоны, такие как @TimerService и новая пакетная обработка Java EE7. Но оба понятия - я думаю - используются для конечных процессов?

1 Ответ

2 голосов
/ 12 апреля 2019

Использование EJB TimerService в текущем проекте для таких задач, как периодическое сокращение данных или внутренняя синхронизация данных. Он позволяет выполнять не только одно время, но и интервальные таймеры и таймеры с расписанием на основе календаря.

Что-то вроде:

@Startup
@Singleton
public class SyncTimer {
    private static final long HOUR = 60 * 60 * 1000L;

    @Resource
    private TimerService timerService;
    private Timer timer;

    @PostConstruct
    public void init() {
        TimerConfig config = new TimerConfig();
        config.setPersistent(false);
        timer = timerService.createIntervalTimer(HOUR, HOUR, config);
    }

    @Timeout
    private synchronized void onTimer() {
        // every hour action
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...