Asynchronous EJB3实例之间的通信(javaee bean间通信)是否可能?

Asynchronous EJB3实例之间的通信(javaee bean间通信)是否可能?,asynchronous,ipc,ejb-3.0,java-ee-6,Asynchronous,Ipc,Ejb 3.0,Java Ee 6,我正在设计一个JavaEE6应用程序的一部分,由EJB3bean组成。部分需求是多个并行(比如几百个)长时间(几天)运行的数据库查找。单个搜索具有不同的搜索参数(开始时间、结束时间、查询筛选器)。参数可能会随着时间的推移而改变 目前,我想到以下几点: SearchController(无状态会话Bean)制定一组搜索参数,通过JMS将其发送给SearchListener SearchListener(消息驱动Bean)接收搜索参数,用参数实例化一个SearchWorker SearchWork

我正在设计一个JavaEE6应用程序的一部分,由EJB3bean组成。部分需求是多个并行(比如几百个)长时间(几天)运行的数据库查找。单个搜索具有不同的搜索参数(开始时间、结束时间、查询筛选器)。参数可能会随着时间的推移而改变

目前,我想到以下几点:

  • SearchController
    (无状态会话Bean)制定一组搜索参数,通过JMS将其发送给
    SearchListener
  • SearchListener
    (消息驱动Bean)接收搜索参数,用参数实例化一个
    SearchWorker
  • SearchWorker
    (SLSB)在数据库中反复搜索;当它找到某样东西时,结果通过JMS发送,搜索继续进行;当达到给定的“结束时间”时,它将结束
我现在想知道的是:

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

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

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

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