【问题标题】:WebSphere WorkManager Cluster Double Execution of the JobWebSphere WorkManager Cluster 双重执行作业
【发布时间】:2018-04-24 13:01:50
【问题描述】:

我有一个应用程序部署在 WebSphere 8.5 和 Java 1.7.1 上,定义了一个由 2 个节点组成的集群。 在这个应用程序中有一个 EJB,它通过工作管理器提交一个异步作业。

问题是在 WAS 8.5 上,Job 在集群的两个节点上执行了两次。在 WAS 6.1 中,这并没有发生。

工作由报警管理员提交。下面提取的代码:

WorkManager wm = serviceLocator.getWorkManager("NameOfCustomWorkManager");            
AsynchScope scope = wm.findAsynchScope("scopeName");

if (scope == null) 
    scope = wm.createAsynchScope("scopeName");

AlarmManager alarmManager = scope.getAlarmManager();        

alarmManager.create(listener, "Alarm Context Info", (int) (DateUtils.getNextTime(nextTime) - System.currentTimeMillis()));  --Fired on a certain hours     

logger.info("Alarm fired.");

有人知道如果是 8.5 是否有额外的配置来避免所描述的问题?

【问题讨论】:

    标签: asynchronous websphere ejb-3.0 workmanagers


    【解决方案1】:

    WebSphere Application Server 中的 WorkManager,无论是哪个版本,都没有也从来没有跨远程 JVM 进行操作或协调的能力。 WorkManager 的设计行为是它只能在您提交工作的同一 JVM 上运行您提交的工作,并且它不知道您从不同的 JVM 提交的重复工作,也没有机制跨 JVM 协调工作。您从 WorkManager 获得的 AlarmManager 实例也是如此。 (WebSphere Application Server 其实有一种方法可以完成上面的事情,就是 Scheduler,但是上面的代码并没有使用那个)。受版本更改影响的应用程序中的某些早期逻辑是否可能导致现在在两个成员上创建警报,而以前它只会在一个成员上创建?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多