2011-11-21 159 views
0

我正在使用Websphere Application Server创建一个典型的Web应用程序,其中UI是JSP,有一个Controller和一个会话EJB和一个数据库。我实现了一个通知系统,作为一个单独的线程在后台运行。为此,我使用了WorkManager。后台线程

我的问题是,我想启动WorkManager,而不必为每个由不同用户启动的每个并行会话创建会话或EJB实例。它不应该基于会话。 现在,WorkManager线程在EJB实例化时启动,所以如果有3个连接,则有3个WorkManager实例。

单会话bean会是一个好主意吗?或者有什么地方可以放置一个将被调用的'main()'方法,或者类似的东西?

任何想法,将不胜感激。

回答

1

我认为有以下几个选项:

  • 使用servlet上下文侦听提交工作(当WAR模块启动,这将被调用/停止)。
  • 使用启动Bean(WebSphere特定API),在应用程序启动/停止时调用一次。
  • 使用引用计数方法记录EJB实例的数量。您在创建第一个实例时提交工作(并在最后一个实例被销毁时停止工作)。请注意,这会延迟工作的开始,直到第一次请求EJB。
  • 在WebSphere 8(支持Java EE 6)中,您可能使用单例会话bean。