为什么Java EE计时器没有集群?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Java EE计时器没有集群?相关的知识,希望对你有一定的参考价值。

我正在使用Java EE EJB计时器和带有oracle数据库的Wildfly 8.2.1服务器。当我在集群环境中的应用程序中运行调度程序时工作不正常,即使在Wildfly中选择了事务隔离:TRANSACTION_SERIALIZABLE。我正在两个节点中部署它从两个节点,但我只需要一个节点。

在EJB中:

@Singleton 
public class TimerSessionBean implements TimerSessionBeanRemote {
@Timeout
    @Schedule(
            hour="11",minute="0",second="00,30"
            )
    public void createTimer(){
        System.out.println("timeoutHandler : "+new Date());
DAO.getInboxDaoImpl().updateStatus();

    }

在DaoImpl:

@Override
    public Boolean updateStatus(String chngCustStus){
        int resVal = 0;

            String sql = "INSERT INTO bonus SELECT ename, job, sal, comm FROM emp
   WHERE comm > sal * 0.25";

        } 
    }

在Wildfly服务器中:选为

 Transaction Isolation:  TRANSACTION_SERIALIZABLE
答案

这确实是预期的行为。

Java EE规范中没有集群的概念。因此,没有便携式解决方案。在JBoss上我曾经使用过Quartz计时器。特别是对于Wildfly 8,请检查this post是否回答了您的问题。

另一答案

集群EJB计时器在WildFly 9及更高版本中可用。

文档可在以下位置找到:

  1. WildFly 9 | EJB3 Clustered Database Timers
  2. WildFly 10 | EJB3 Clustered Database Timers

大多数Java E实现都支持这种或那种方式,但@ 38leinad确实是正确的,没有在任何地方指定此行为。

早期版本的JBossAS 7 - > WildFly 8.x错过了,因为它是一个全新的规范实现,重点是Java EE 6,然后是Java EE 7合规性。

以上是关于为什么Java EE计时器没有集群?的主要内容,如果未能解决你的问题,请参考以下文章

使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)

使用 java EE 的监控系统架构

如何在使用片段和计时器的选项卡式活动上更新 UI

python使用上下文对代码片段进行计时,非装饰器

Java EE JTA 从不事务

如果用户没有使用浏览器,则jQuery计时器停止