【问题标题】:Alternative for EJB timer for weblogic over a cluster集群上 weblogic 的 EJB 计时器的替代方案
【发布时间】:2014-07-15 22:17:08
【问题描述】:

最近我遇到了一个要求,我必须为应用程序提供一个自定义 jar,这个 jar 将包含定期查询数据库并为使用它们的特定应用程序获取消息(记录)的线程。因此,例如应用程序 A 使用此 jar,则 jar 中的线程将仅为应用程序 A 获取所有消息。 该数据库是应用程序之间的共享数据库。

这适用于独立应用程序,但对于部署在企业应用程序服务器(在我的情况下为 weblogic)中的集群上的应用程序,这会失败,因为集群上的所有节点都在它们自己的 JVM 中运行,并且每个节点都为同一个应用程序。因此,可能存在两个线程同时运行并获取相同记录的情况,并且会有双重处理。不能使用同步,因为这会导致性能瓶颈。

我不能使用单例计时器 EJBS。听说过workmanager,但网上没有足够的例子。我正在使用spring核心框架。

如果你们有任何建议,那就太好了。

谢谢。

【问题讨论】:

    标签: java multithreading jakarta-ee scheduled-tasks java-ee-6


    【解决方案1】:

    首先,如果您正在处理 JavaEE,请停止思考线程,它应该为更高层次的思维方式提供更高层次的抽象。

    1. JavaEE 7 提供ManagedScheduledExecutorService
    2. Quartz 在这种情况下工作得很好 - 您的 JavaEE 集群中只有一个节点会执行该作业

    【讨论】:

    • 感谢您的及时回复。在这里使用 JavaEE 6。将看看石英。还想知道 commonj 与 spring 结合在这种情况下是否有帮助?没有通过网络获得任何示例。
    • 看来commonj是JSR 237的实现,由于某种原因已经撤消了。那里可能有一些有用的东西,但主流是 JEE7 内置调度程序和用于 pre-JEE7 应用程序的 Quartz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2013-11-16
    • 2017-01-16
    相关资源
    最近更新 更多