Search code examples
glassfishejblazy-loadingjndi

How do I force GlassFish 2 to load EJBs on startup?


We're using EJB3 on GlassFish v2.

My application includes a GenericServlet called StartupServlet, which has an init method. java.util.TimerTask pollers started from this method cannot lookup facades from the InitialContext.

However if I make an HTTP request and do a lookup, it succeeds. Therefore I have a workaround now where my poller startup code makes an HTTP connection to a page which looks up the interfaces they need.

How can I rearrange my application so I don't need to use such a hack? If possible the solution needs to work on GFv3 as well.

Thanks in advance for your help!


Solution

  • On GF 2, I have a servlet that on start ensures that my timer is created. This looks up a remote session bean and calls it successfully from the init() (not actual code, distilled down to the important parts):

    @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();
    }