我创建了一个带有本地接口的EJB计时器,我无法通过ServletContextListener对它进行JNDI查找。
以下是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。
任何建议都将受到赞赏。
答案 0 :(得分:0)
启动JBoss时,它会记录所有本地/远程接口和他们的jndi配置。
JBoss启动日志:
15:26:47,394 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
hrms/AccountSummarySessionBean/local - EJB3.x Default Local Business Interface
hrms/AccountSummarySessionBean/local-com.cc.hrms.bl.accounts.generalaccount.session.AccountSummarySessionBeanLocal - EJB3.x Local Business Interface
查找:
initialCtx.lookup("hrms/AccountSummarySessionBean/local-com.cc.hrms.bl.accounts.generalaccount.session.AccountSummarySessionBeanLocal");
我正在使用JBoss-5&有通用的查找方法,只给出接口名称。
您可以相应地修改它。