如何通过ServletContextListener的上下文查找来访问EJB bean

Mur*_*esh 6 jboss spring ejb app-startup servletcontextlistener

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

因为JBOSS中的Web部署发生在EJB bean与JNDI树绑定之前.如何克服这个?有没有办法尽早配置JNDI绑定,或者在EJB完全部署后再启动Web部署?

我已经把Thread.sleep()这个contextInitialized()方法中的服务调用之前放了,它在我的JBoss5.1.0 GA中运行正常,并且在同一版本的其他机器JBoss中同样没有用.

应用程序需要这个,因为我们希望从数据库加载一些主数据并使其在Web层中可用(缓存类型).JBOSS startupmbean适合这个要求吗?如果是,我如何将数据提供给Web层?

如果有其他方法,请建议.

Ber*_*ium 1

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

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

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