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

Posted

技术标签:

【中文标题】EJB3 实例之间的通信(Java EE bean 间通信)可能吗?【英文标题】:Communication between EJB3 Instances (Java EE inter-bean communication) possible? 【发布时间】:2010-04-17 09:48:22 【问题描述】:

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

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

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

我现在想知道的是:

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于EJB3 实例之间的通信(Java EE bean 间通信)可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

WebSphere 7 中的消息驱动 bean (EJB3)、XA 事务、错误处理

EJB3.0的一些学习

Java EE 应用程序之间的 Web 服务通信

使用支持 bean 和 jsf 的 Java EE 持久化实体 [重复]

使用MyEclipse开发Java EE应用:EJB项目开发初探(下)

选择嵌入式 EJB 3.x 容器在 Tomcat 上运行 Java EE 5 应用程序