6

需要从 servlet 上下文侦听器的contextInitialized()方法调用 EJB 服务。应用程序在 JBOSS 上运行,尽管上下文侦听器工作正常,但我无法通过 JNDI 查找访问 EJB bean。

因为 JBOSS 中的 Web 部署发生在 EJB bean 与 JNDI 树绑定之前。如何克服这一点?有没有办法在 EJB 完全部署后尽早配置 JNDI 绑定或稍后开始 Web 部署?

我已经Thread.sleep()contextInitialized()方法中调用服务之前,它在我的 JBoss5.1.0 GA 中运行良好,在相同版本的其他机器 JBoss 中同样没有运行。

应用程序需要这个,因为我们希望从数据库中加载一些主数据并使其在 Web 层中可用(一种缓存)。JBOSS startupmbean 是否适合这个要求?如果是,我怎样才能使数据可用于 web 层?

另外,如果有任何替代方法可用,请提出建议。

4

1 回答 1

1
  • 轮询contextInitialized(). 因此,与其只是休眠一段时间,不如尝试连接到 EJB。如果失败,休眠并重试,直到 EJB 可用。在这种情况下,上下文初始化被阻止。

  • 将缓存实现为惰性缓存:在第一次查询期间填充缓存(并使用相同的轮询过程:连接到 EJB,重试直到它可用)。在这种情况下,缓存块。

  • 您可以将您的部署分成两部分:一部分用于 EJB,另一部分用于 Web 应用程序。然后部署第一个,并延迟 Web 应用程序的部署,直到绑定 EJB(通过查看日志文件或尝试从命令行应用程序绑定到 EJB)

于 2014-06-24T15:22:47.210 回答