У меня есть веб-проект на Java EE 5 и Websphere 7.0
Мне нужно создать планировщик и запустить его после развертывания приложения.
Что я пробовал:
Я создаю EJB с интерфейсом:
@Local
public interface ISchedulerBean {
public void executeTimer(Timer timer);
public void createTimer();
}
Сессионный компонент без сохранения состояния реализует этот интерфейс. Метод createTimer создает экземпляр таймера из TimerService. Эта часть кода работает нормально.
Также мне нужно вызвать метод createTimer () после развертывания приложения.
Я попробовал:
Добавить слушатель servletContext:
открытый класс SchedulerInitialiserContextListener реализует ServletContextListener {
// сервис для поиска ejb
частный WebServiceLocator webServiceLocator;
частный SchedulerService schedulerService;
public SchedulerInitialiserContextListener () {
webServiceLocator = new WebServiceLocator ();
schedulerService = webServiceLocator.getSchedulerService ();
}
public void contextDestroyed(ServletContextEvent ctx) {
}
public void contextInitialized(ServletContextEvent ctx) {
schedulerService.createTimer();
}
}
создать сервлет с 1, где внедрить SchedulerBean в метод init () и вызвать createTimer.
Но это не работает, потому что сначала веб-приложение развертывает веб-приложение, прослушивает вызовы, инициализирует сервлеты и только затем развертывает ejb.jar, в котором находятся все ejb. Я вижу это в лог-файле вебшпере. Поэтому, когда я пытаюсь получить аннотацию или просмотр eJb throw @EJB, я получаю исключение, потому что ejb не найден.
Может быть, есть другой подход для запуска таймера после развертывания модуля ejb или изменения порядка развертывания?