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

问题描述 投票:1回答:2

我正在使用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 ejb-3.2
2个回答
0
投票

这确实是预期的行为。

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


0
投票

集群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合规性。

© www.soinside.com 2019 - 2024. All rights reserved.