Я должен все же найти хороший способ легкого поддержания сохраненного procs в управлении исходным кодом, которое делает его столь же бесшовным как кодовая база. Этого просто не происходит. Это одно делает помещение SQL в Вашем коде стоящим для меня. Различия в производительности незначительны в современных системах.
Решение, которое я нашел, уродливо, но так же уродливо, как и любое другое законное решение этой проблемы (например, решение от @fvu). Применение аннотации @WebService
к компоненту заставит JBoss создать его экземпляр сразу после развертывания (поскольку ему нужен способ создания WSDL компонента), поэтому будет вызван метод, помеченный @PostConstruct
. Оттуда я смог установить таймер.
Я думаю, что самым простым и переносимым решением является добавление веб-приложения к вашему корпоративному приложению с помощью прослушивателя контекста ( contextInitialized event ), который инициализирует ejb.
Кстати, это более или менее то же самое, что и Quartz Scheduler (класс QuartzInitializerListener)
EJB 3.1 introduces the Singleton bean. It will be created at deplyoment of the EJB.
@Singleton
@Startup
public class TimerSessionBean {
@Resource
TimerService timerService;
@PostConstruct
public void startTimer() {
Logger.getLogger(getClass().getName()).log(Level.INFO,
timerService.getTimers().size() + " timers running");
Logger.getLogger(getClass().getName()).log(Level.INFO, "create a timer");
timerService.createTimer(10000, 10000, "a timer");
}
@Timeout
void doSomething(Timer timer) {
System.out.println("something");
}
}
Another new feature in EJB 3.1 which can be used to run a task periodically is the Schedule annotation.