gpt4 book ai didi

java - EJB @Lock 未按预期工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:50 26 4
gpt4 key购买 nike

我有一个调用单例 EJB 的预定 EJB。出于某种原因,计划的方法在每个计划中执行两次(与从 WAR 文件和 EAR 中引用它有关)。为了解决这个问题,我在 @Singleton bean 的方法上添加了 @Lock 注释,但它仍然同时执行了两次:

@Stateless
public class PaymoTimer {
@EJB
private IPaymoManagerRemote manager;

@Schedule(hour = "10,12,14,16", minute = "41", second = "0", info = "PaymoTimer")
public void timer() throws Exception {
manager.generateEmailReport();
}
}


@LocalBean
@Singleton
public class PaymoManager implements IPaymoManagerRemote {
@Override
@Lock(LockType.WRITE)
public void generateEmailReport() {
System.out.println("generateEmailReport");
String text = getDailySummaryForUser();
System.out.println("done");
}
}

我的控制台打印出以下内容:

12:42:00,008 INFO  [stdout] (EJB default - 10) generateEmailReport
12:42:00,009 INFO [stdout] (EJB default - 9) generateEmailReport
12:42:24,027 INFO [stdout] (EJB default - 10) done
12:42:24,323 INFO [stdout] (EJB default - 9) done

查看时间和进程 ID 很明显,在先前的实例仍在运行时调用了该方法。

我是否误解了 @Lock 注释的用途?

最佳答案

我认为,计时器和单例被打包到 WAR(可能在 wildfly 中,您基本上不再需要 EAR)以及 EAR。因此,它们被部署并运行了两次。

关于java - EJB @Lock 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com