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

发布于 2024-11-16 20:01:09 字数 325 浏览 3 评论 0原文

我们在 GlassFish v2 上使用 EJB3。

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

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

我怎样才能重新安排我的应用程序,这样我就不需要使用这样的技巧了?如果可能的话,该解决方案也需要在 GFv3 上运行。

预先感谢您的帮助!

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!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三岁铭 2024-11-23 20:01:09

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

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();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文