Как удалить таймеры из контейнера EJB для бинов Singleton при отмене развертывания?

У меня есть следующий bean-компонент @Singleton, который я использую для выполнения некоторых запланированных задач:

@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), а затем развертываю приложение с нуля, оно работает отлично.

Как мне удалить таймеры при повторном развертывании приложения?


person tarka    schedule 31.12.2012    source источник
comment
С EJB рекомендуется использовать службу таймера Java EE.   -  person perissf    schedule 31.12.2012
comment
Спасибо, периссф, что исправили.   -  person tarka    schedule 31.12.2012


Ответы (1)


Согласно комментарию perissf:

Для EJB рекомендуется использовать службу таймера Java EE.

person tarka    schedule 06.08.2013