如何强制GlassFish 2在启动时加载EJB?

时间:2011-06-23 11:29:19

标签: glassfish ejb lazy-loading jndi

我们在GlassFish v2上使用EJB3。

我的应用程序包含一个名为StartupServlet的GenericServlet,它有一个init方法。从这个方法启动的java.util.TimerTask轮询器无法从InitialContext中查找外观。

但是,如果我发出HTTP请求并进行查找,则会成功。因此,我现在有一个解决方法,我的轮询器启动代码与查找所需接口的页面建立HTTP连接。

如何重新安排我的应用程序,以便我不需要使用这样的黑客攻击?如果可能,解决方案也需要在GFv3上运行。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在GF 2上,我有一个servlet,它在启动时确保我的计时器被创建。这会查找一个远程会话bean并从init()成功调用它(而不是实际代码,直到重要部分):

@EJB(name="TimerSessionRef", beanInterface=TimerSessionRemote.class)
public class StartTimers extends HttpServlet {

@Override
public void init() throws ServletException {
super.init();
try {
    Context ctx = new InitialContext();
    TimerSessionRemote timerSession = (TimerSessionRemote) ctx.lookup("java:comp/env/TimerSessionRef");
    timerSession.createTimer();
} catch (NamingException ex) {
    logger.blah();
}