Отключение всех расписаний в 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");
}
}
Надеюсь это поможет!:)