Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EE单例计划任务执行两次_Java_Jakarta Ee_Design Patterns_Jboss_Singleton - Fatal编程技术网

Java EE单例计划任务执行两次

Java EE单例计划任务执行两次,java,jakarta-ee,design-patterns,jboss,singleton,Java,Jakarta Ee,Design Patterns,Jboss,Singleton,我想在预定时间执行两项任务(CET 23:59和08:00)。我创建了一个EJB单例bean来维护这些方法: @Singleton public class OfferManager { @Schedule(hour = "23", minute = "59", timezone = "CET") @AccessTimeout(value = 0) // concurrent access is not permitted public void fetchNewOff

我想在预定时间执行两项任务(CET 23:59和08:00)。我创建了一个EJB单例bean来维护这些方法:

@Singleton
public class OfferManager {

    @Schedule(hour = "23", minute = "59", timezone = "CET")
    @AccessTimeout(value = 0) // concurrent access is not permitted
    public void fetchNewOffers() {
        Logger.getLogger(OfferManager.class.getName()).log(Level.INFO, "Fetching new offers started");

        // ...

        Logger.getLogger(OfferManager.class.getName()).log(Level.INFO, "Fetching new offers finished");
    }

    @Schedule(hour="8", minute = "0", timezone = "CET")
    public void sendMailsWithReports() {
        Logger.getLogger(OfferManager.class.getName()).log(Level.INFO, "Generating reports started");

        // ...

        Logger.getLogger(OfferManager.class.getName()).log(Level.INFO, "Generating reports finished");
    }
}
问题是两个任务都执行了两次。服务器为WildFly Beta1,以UTC时间配置

以下是一些可能有用的服务器日志:

2013-10-20 11:15:17,684 INFO  [org.jboss.as.server] (XNIO-1 task-7) JBAS018559: Deployed "crawler-0.3.war" (runtime-name : "crawler-0.3.war")
2013-10-20 21:59:00,070 INFO  [com.indeed.control.OfferManager] (EJB default - 1) Fetching new offers started
....
2013-10-20 22:03:48,608 INFO  [com.indeed.control.OfferManager] (EJB default - 1) Fetching new offers finished
2013-10-20 23:59:00,009 INFO  [com.indeed.control.OfferManager] (EJB default - 2) Fetching new offers started
....
2013-10-20 23:59:22,279 INFO  [com.indeed.control.OfferManager] (EJB default - 2) Fetching new offers finished

这种行为的原因可能是什么?

我通过使用服务器时间(UTC)指定计划时间解决了这个问题。 所以

替换为:

@Schedule(hour = "21", minute = "59")

我不知道这种行为的原因,可能是Wildfly的早期发布造成的。

我对TomEE plume 7.0.4也有同样的问题。在我的案例中,解决方案是将
@Singleton
更改为
@Stateless

检查是否有任何其他
@Schedule
可以在
21:59:00运行。此时不应运行您显示的代码。这些是使用
@Schedule
注释的唯一方法。第二个方法也将执行两次。计划时间前2小时一次,之后正确
@Schedule(hour = "21", minute = "59")