Я честно пропустил что-то здесь. Я не знаю, как создать экземпляр объекта TimerService. Он всегда равен нулю. У меня нет конструктора, потому что это интерфейс. Я не могу использовать методы create. @Resource, похоже, ничего не выделяет.TimerService null
Я пытаюсь настроить простой программный таймер, который выполняет задание каждые X минут. Продолжительность таймаута может варьироваться в зависимости от конфигурации, которая может меняться во время выполнения. Я использую веб-приложение WebLogic 12.
То, что я до сих пор:
import javax.annotation.Resource;
import javax.ejb.Singleton;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;
@Singleton
public class TimerBean {
@Resource
protected TimerService timerService;
public TimerBean(){
System.out.println("TimerBean constructor " + timerService);
}
@Timeout
public void timeoutHandler(Timer timer){
String name = timer.getInfo().toString();
System.out.println("Timer ticked. Name=" + name);
}
public void startOrModifyTimer(long initialExpiration, long interval, String name) {
System.out.println("Start or modify " + timerService);
}
}
Это выходы:
TimerBean конструктор нулевой
& затем после того, как сервер работает, если я позвоню начать или изменить:
Start или изменение нулевой
редактировать: Я получил его на работу, делая TimerBean @Singleton
& @Startup
& замена конструктор с @PostConstruct
методом.
однако пока у него есть объект для TimerService
инстанцированный всякий раз, когда я пытаюсь использовать его методы, которые он дает мне java.lang.IllegalArgumentException: Unknown bean state 0
, для которых нет никакой информации ...
Плохой ответ, поскольку реальной проблемой был ОП, не понимавший, как «бобы» работают в Java EE. Таким образом, всякий раз, когда вы используете аннотацию, такую как '@ Resource',' @ Inject', '@ PersistenceContext' и т. Д., Это должно быть сделано в * управляемом * компоненте, что означает, что экземпляры класса bean-класса могут * только * быть созданный контейнером Java EE, * не * кодом приложения; т. е. вы не можете выполнять 'new MyBean()' и ожидать, что его поля '@ Resource' будут установлены. –