2010-04-17 61 views
0

我正在设计一个由EJB3 beans组成的Java EE 6应用程序的一部分。部分要求是多次并行(比如几百次)数据库搜索。单个搜索具有不同的搜索参数(开始时间,结束时间,查询过滤器)。参数可能随时间而改变。EJB3实例之间的通信(Java EE bean间通信)可能吗?

目前我正在考虑以下内容:

  • SearchController(无状态会话Bean)形成一组搜索参数,通过JMS把它发送到SearchListener
  • SearchListener(消息驱动Bean)接收搜索参数,实例化具有参数的SearchWorker
  • SearchWorker(SLSB)通过数据库重复搜索;当它发现某些东西时,通过JMS发送结果,并继续搜索;当给定的“结束时间”已经达到了,它结束

什么我现在想知道:

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

回答

0

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

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

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