EJB3实例之间的通信(Java EE bean间通信)可能吗?

时间:2010-04-17 09:48:23

标签: asynchronous ipc ejb-3.0 java-ee-6

我正在设计Java EE 6应用程序的一部分,该应用程序由EJB3 bean组成。部分要求是多个并行(比如几百个)长时间运行(数天)数据库搜索。个人搜索具有不同的搜索参数(开始时间,结束时间,查询过滤器)。参数可能会随着时间的推移而改变。

目前我正在考虑以下事项:

  • SearchController(无状态会话Bean)制定一组搜索参数,通过JMS将其发送到SearchListener
  • SearchListener(消息驱动Bean)接收搜索参数,使用参数实例化SearchWorker
  • SearchWorker(SLSB)在数据库中反复搜寻;当它找到某些东西时,结果通过JMS发送,搜索继续;当给定的'结束时间'到达时,结束

我现在想知道:

  • 是否存在问题,EJB3实例运行了几天? (除此之外,我需要能够处理容器重启...)
  • 我如何知道当前正在运行的SearchWorker的EJB实例数量是多少?
  • 是否可以单独与它们通信(类似于将系统V信号发送到unix进程),例如,发送新参数,结束实例等。

1 个答案:

答案 0 :(得分:0)

如果您长时间打开一个巨大的ResultSet,您可能会遇到事务超时或数据库锁定问题。

没有用于确定哪个bean实例在方法中运行的内置机制,因此您需要添加自己的机制。您的产品可能具有某种性能监视功能,可以让您知道当前运行方法的每种类型的bean有多少。

对于跨线程通信,您需要实现自己的同步并定期检查bean方法。您将超出标准EJB的范围,因为对业务方法的每次并行调用都将从池中分配新的SLSB。