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

时间:2017-12-29 09:38:18

标签: java-ee ejb-3.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";

        } 
    }

其中In Wildfly服务器:选为

 Transaction Isolation:  TRANSACTION_SERIALIZABLE

2 个答案:

答案 0 :(得分:0)

这确实是预期的行为。

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

答案 1 :(得分:0)

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

文档可在以下网址找到:

  1. WildFly 9 | EJB3 Clustered Database Timers
  2. WildFly 10 | EJB3 Clustered Database Timers
  3. 大多数Java E实现都支持这种或那种方式,但@ 38leinad确实是正确的,不会在任何地方指定此行为。

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