Дерево страниц
Skip to end of metadata
Go to start of metadata

НЗ администратор может наложить квоты по длительности. Квота определяется либо в виде длительности в секундах (для ASAP и Delayed), либо в виде фиксированного времени завершения работы "группы агентов" (для агентов по-расписанию)

Лимит должен отслеживать КМА. При исчерпании квоты, КМА должен инициировать прерывание выполнения агента.

Статус

ГОТОВО

Комментарий

Для этого надо вызвать Future.cancel(true) для задачи, исполняющей агента в пуле потоков. Данный вызов взведет в потоке, исполняющем задачу флаг прерывания (Thread.currentThread.isInterrupted()), а также прервет ожидание на операциях межпоточной синхронизации (wait, join и т.п.) с выбросом InterruptedException. Но InterruptedException выбросится только если поток находился в выполнении одной из этих операций. Поэтому агент должен ещё периодически вызывать AgentContext.checkCancelation(), который при наличии флага прерывания должен бросить InterruptedException.

if (Thread.currentThread.isInterrupted()) throw new InterruptedException();

Аналогичную проверку должен делать и итератор JMS-сообщений с данными на вызовах next() и hasNext()

InterruptedException также может быть выброшен и при аккуратной остановке сервера (через ExecutorService.shutdownNow()). В обоих случаях задача в пуле потоков, получившая такое исключение, должна завершить исполнение.

  • Нет меток