У меня проблема с сервисом таймера EJB3.1. Я нахожу этот вопрос довольно странным! У меня есть сессионный компонент без состояния, как показано ниже, на сервере приложений JBoss7.1.1.EJB3.1 Таймер отменить выпуск
import javax.annotation.Resource;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import javax.interceptor.Interceptors;
@Stateless
@Local(HelloUserLocal.class)
@Remote(HelloUserRemote.class)
public class HelloUserBean implements HelloUserRemote {
@Resource
private TimerService timerService;
@Interceptors({SayHelloMethodLoggingInterceptor.class})
public String sayHello(String name) {
System.out.println("In sayHello(name)");
String customName = "Hello " + name + " welcome to EJB 3 In Action!";
System.out.println("Before returning, register Timer service");
timerService.createTimer(10000, 2000, "Hey! Good Night!");
return customName;
}
@Timeout
public void activateTimer(Timer timer){
System.out.println(timer.getInfo());
//timer.cancel();
}
}
Я зарегистрировал таймер с initialDuration и intervalDuration, как указано выше. После того, как я развернул свой bean-компонент, он работает отлично. Хорошо, я понял, и я не хочу, чтобы моя консоль сервера загромождалась. Итак, я прокомментировал строку кода timerService.createTimer (..) и перераспределил ее. Но я все еще вижу, что сообщение печатается. Хорошо, я знаю, что таймеры EJB сохраняются и перезагружаются серверы. Единственный способ остановить службу Timer - использовать метод timer.cancel(), а затем повторно развернуть. Но как я могу остановить или отменить мой таймер из контейнера, не используя timer.cancel()?
Сколько времени таймер.cancel(); принять, чтобы отменить таймер? Когда я использую timer.cancel(), а затем перераспределяю свое приложение, я вижу «Эй, хорошая ночь!». печатается два раза перед остановкой, что означает, конечно, timer.cancel() занимает более 2000 мс?
Действительно выглядит как ошибка – Leo
Возможно, но любой способ управлять таймерами из консоли администратора контейнера или что-то в этом роде? – IndoKnight
Не уверен. Спецификация таймера ejb заполнена недостающими точками. Не знаю JBoss, но для Tomee мне пришлось использовать функции кварца, чтобы обойти некоторые проблемы с spec. Что JBoss использует как реализацию таймера? Возможно, у них есть кое-какое проприетарное расширение для этого. Можете ли вы настроить на таймер ejb использовать бэкэнд jdbc? – Leo