Я создал таймер EJB с локальным интерфейсом, и я не могу выполнить поиск JNDI для него из ServletContextListener.
Вот часть кода EJB:
@Stateless
@LocalBinding(jndiBinding = "TimedFileDeletion")
public class TimedFileDeletionBean implements TimedFileDeletionBeanLocal {
@Resource
TimerService timerService;
private String timerInfo = "FileDeletionTimer";
public void startTimer() {
....
}
public boolean isItRunning() {
....
}
@Timeout
public void timeout(Timer timer) {
....
}
}
Вот локальный интерфейс:
public interface TimedFileDeletionBeanLocal {
public void startTimer();
public boolean isItRunning();
}
А вот ServletContextListener:
public class StartupEventHandler implements ServletContextListener {
TimedFileDeletionBeanLocal timedFileDeletionBeanLocal;
public StartupEventHandler() {
try {
InitialContext ic = new InitialContext();
timedFileDeletionBeanLocal = (TimedFileDeletionBeanLocal) ic.lookup("java:comp/env/ejb/TimedFileDeletion");
} catch (NamingException e) {
e.printStackTrace();
}
}
public void contextInitialized(ServletContextEvent arg0) {
if(!timedFileDeletionBeanLocal.isItRunning()) {
timedFileDeletionBeanLocal.startTimer();
}
}
public void contextDestroyed(ServletContextEvent arg0) {
}
}
Для поиска я также использовал следующие строки, но ни одна из них не работала:
- Java: comp / env / TimedFileDeletion
- Java: Comp / TimedFileDeletion
- Java: TimedFileDeletion
- TimedFileDeletion
Во всех случаях я получал исключение javax.naming.NameNotFoundException.
Любой совет будет оценен.