3

我正在使用 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
4

2 回答 2

1

WildFly 9 和更新版本中提供了集群 EJB 计时器。

文档可在以下位置找到:

  1. 野蝇 9 | EJB3 集群数据库定时器
  2. 野蝇 10 | EJB3 集群数据库定时器

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

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

于 2018-01-02T13:31:45.843 回答
0

这确实是预期的行为。

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

于 2017-12-31T08:33:06.350 回答