Отключение всех расписаний в Glassfish 3.1

Как отключить все планировщики (аннотированные @Schedule) в проекте, развертываемом на Glassfish 3.1
Может быть, есть некоторые записи конфигурации для этого?
У меня есть около 20 EJB с планировщиками в моем проекте, и если я хочу протестировать / исправить мелочь, я не хочу, чтобы все / некоторые таймеры запускались.

2 ответа

Доступ к TimerService#getTimers() вернет только таймеры для этого конкретного EJB. Не существует стандартизированного способа доступа ко всем таймерам в контейнере (на самом деле, вот запрос улучшения: http://java.net/jira/browse/EJB_SPEC-47).

Я думаю, вам нужно использовать какое-то запатентованное решение Glassfish и возиться с его внутренними компонентами (если это возможно). Я бы спросил вас в списке рассылки GlassFish.

К сожалению, я не знаю, есть ли какие-либо записи конфигурации для решения вашей проблемы, но есть программный способ сделать это, вызвав метод cancel() для Timer-Objects, предоставленных TimerService.

Вот пример класса, который я просто вкладываю в проекты, когда хочу протестировать только мелочи:

@Stateless
public class ScheduleCancellation {

  @Resource
  private TimerService timerService;

  @Schedule(second = "0", minute = "*", hour = "*")
  public void cancelTimers() {
    System.out.println("cancelTimers()");
    for (Timer timer : timerService.getTimers()) {
      System.out.println("schedule gone!");
      timer.cancel();
    }
  }

  @Schedule(second = "*", minute = "*", hour = "*")
  public void tick() {
    System.out.println("tick");
  }
}

Надеюсь это поможет!:)

Другие вопросы по тегам