Как отключить все планировщики (@Schedule аннотированные) в проекте deploing на Glassfish 3.1
Возможно, есть некоторые записи конфигурации для этого?
У меня около 20 EJB с планировщиками в моем проекте, и если я хочу проверить/исправить небольшую вещь, я не хочу, чтобы все/некоторые таймеры запускались.Отключение всех графиков в Glassfish 3.1
ответ
к сожалению, я не знаю, если есть некоторые элементы конфигурации, чтобы решить вашу проблему, но есть programatical способ сделать это, вызвав отменить() -метода на Таймер -Объекты предусмотренных 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");
}
}
Надеется, что это помогает! :)
Метод getTimer() возвращает только активные таймеры, связанные с этим компонентом. Может быть, возможно получить все таймеры в проекте и деактивировать их? – alexblum
Доступ к TimerService#getTimers()
будет возвращать только таймеры для данного конкретного EJB. Нет стандартного способа доступа ко всем таймерам в контейнере (на самом деле, вот запрос расширения: http://java.net/jira/browse/EJB_SPEC-47).
Думаю, вам нужно использовать запатентованное решение Glassfish и возиться со своими внутренностями (если это возможно). Я бы спросил у меня GlassFish mailing list.
Не была добавлена аннотация '@ Schedule' в EJB 3.1 (http://docs.oracle.com/javaee/6/api/javax/ejb/Schedule.html#persistent%28%29)? Вы используете EJB 3.1 или 3.0? –
Я использую EJB 3.1 – alexblum