0

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

目前我正在考虑以下几点:

  • SearchController(Stateless Session Bean) 制定一组搜索参数,SearchListener通过 JMS将其发送到
  • SearchListener(Message Driven Bean) 接收搜索参数,SearchWorker用参数实例化 a
  • SearchWorker(SLSB) 反复搜索数据库;当它找到某些东西时,通过 JMS 发送结果,然后继续搜索;当给定的“结束时间”到达时,它结束

我现在想知道的是:

  • EJB3 实例运行了几天有什么问题吗?(除此之外我需要能够处理容器重启......)
  • 我如何知道SearchWorker当前正在运行多少个 EJB 实例以及哪些 EJB 实例?
  • 是否可以单独与它们通信(类似于向 unix 进程发送 System V 信号),例如发送新参数、结束实例等。
4

1 回答 1

0

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

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

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

于 2010-04-23T05:51:29.343 回答