EJB автоматические таймеры, блокировки, тайм-ауты и длительные методы - PullRequest
3 голосов
/ 16 марта 2012

У меня есть несколько вопросов относительно безопасности и правильности следующей услуги гипотетического таймера:

@Singleton
public class MyTimerService {

  @Schedule(second = "*", minute = "*", hour = "*", persistent = false)
  public void checkTakingOneMinute() {
    // code below takes a minute or so
  }
}

Все, что я хочу сделать здесь, это проверить что-то как можно скорее (в этом случае каждую секунду). Насколько я понимаю, метод checkTakingOneMinute() не начнет новую проверку, пока не завершит предыдущий вызов. Это то, что я хочу, но меня беспокоит внутреннее содержимое контейнера: будет ли пропуск метода просто пропущен, когда он занят, или он будет заблокирован и помещен в своего рода очередь с последующими таймаутами блокировки?

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Спецификация EJB требует, чтобы контейнерное расписание «догоняло» события таймера, если он не может запустить таймер, потому что он уже запущен. На практике контейнеры, вероятно, пересчитывают время следующего срабатывания после завершения метода, а затем сразу же повторяют выполнение, если время следующего срабатывания «раньше» текущего времени. Я знаю, что так работает WebSphere Application Server.

Обратите внимание, что значение по умолчанию ConcurrencyManagement(ConcurrencyManagemementType.CONTAINER) для компонента и Lock(LockType.WRITE) для метода таймера предотвратит выполнение любых других методов. Если вам нужны другие методы для этого компонента, вы можете рассмотреть возможность использования ConcurrencyManagementType.BEAN.

3 голосов
/ 16 марта 2012

Мы используем таймеры в нашем приложении, но внутри Weblogic.Насколько я знаю, если поток таймера занят обработкой чего-либо во время его пробуждения для следующего расписания, процесс пробуждения будет ожидать повторного выполнения следующего расписания, но это можно контролировать на основе некоторых параметров.Ниже я нашел некоторую документацию о том, как это делается в Websphere (я не уверен, каковы эти настраиваемые параметры для Websphere) - возможно, эта ссылка поможет прояснить ваши сомнения.Там они упомянули о пропущенных таймерах (раздел «Повторные попытки и пропущенные тайм-ауты»), о чем вы беспокоитесь.

Таймеры EJB в Websphere

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...