如何从取消部署中的Singleton bean的EJB容器中删除计时器?

时间:2012-12-31 12:13:30

标签: singleton ejb glassfish-3 timertask

我有以下用于执行某些计划任务的@Singleton bean:

@Singleton
@Startup
public class SqsScheduler {

    // Logger-------------------------------------------------------------------
    private static final Logger LOG = Logger.getLogger(SqsScheduler.class.getName());

    // Variables----------------------------------------------------------------
    Timer timer;
    StoredDynamoQueries storedDynamoQueries = new StoredDynamoQueries();

    // Constructors-------------------------------------------------------------
    public SqsScheduler() {
        timer = new Timer();
        timer.scheduleAtFixedRate(new ScheduledTask(), 0, 180 * 1000);
    }

    // Methods------------------------------------------------------------------
    class ScheduledTask extends TimerTask {

        @Override
        public void run() {

           // The scheduled tasks to perform

        }
    }
}

一切正常但除非我取消部署/重新部署应用程序,否则TimerTasks将被删除,然后重新部署的应用程序开始产生错误。如果我取消部署应用程序,请重新启动服务器(Glassfish 3.1.2.2),然后从头开始部署应用程序,它可以正常工作。

如何在重新部署应用程序时删除计时器?

1 个答案:

答案 0 :(得分:0)

根据 perissf 评论:

  

使用EJB时​​,建议使用Java EE Timer Service