Вам бы лучше иметь более специализированный процесс. Настоящая проблема - проблема 100 000 человек. Это будет зависеть от того, сколько времени займут ваши действия.
Поскольку легко видеть, что каждую секунду таймер EJB запускает 30 потоков для обработки всех текущих ожидающих заданий, поскольку именно так он работает.
Кроме того, таймеры сохраняются, поэтому ваша таблица управляемых EJB-таймеров будет сохранять и удалять 30 строк в секунду (всего 60), что предполагает 100 000 транзакций в час.
Итак, очень много работы происходит очень быстро. Я легко вижу, что система просто «отстает» и никогда не догоняет.
Специализированный процесс мог бы быть намного легче, возможно, мог бы пакетировать вызовы действий (вызывать 5 действий на поток вместо одного на поток) и т. Д. Было бы неплохо, если бы вам не нужно было сохранять события таймера, но это то, что есть. Вы можете легко добавить события таймера в файл для безопасности и сохранить их в памяти. При перезапуске системы вы можете перезагрузить этот файл, а затем свернуть файл (каждый час создавать новый файл, удалять старый файл после его использования и т. Д.). Это позволит сэкономить много трафика БД, но вы можете потерять транзакционный характер БД.
В любом случае, я не думаю, что вы хотите использовать EJB Timer для этого, я не думаю, что он действительно предназначен для такого количества трафика. Но вы всегда можете проверить это и увидеть. Убедитесь, что вы тестировали перезапуск вашего контейнера, чтобы увидеть, насколько хорошо он работает с ожидающими заданиями таймера 100K в его таблице.