我们在GlassFish v2上使用EJB3。
我的应用程序包含一个名为StartupServlet的GenericServlet,它有一个init方法。从这个方法启动的java.util.TimerTask轮询器无法从InitialContext中查找外观。
但是,如果我发出HTTP请求并进行查找,则会成功。因此,我现在有一个解决方法,我的轮询器启动代码与查找所需接口的页面建立HTTP连接。
如何重新安排我的应用程序,以便我不需要使用这样的黑客攻击?如果可能,解决方案也需要在GFv3上运行。
提前感谢您的帮助!
答案 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();
}