Для этого надо вызвать 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()). В обоих случаях задача в пуле потоков, получившая такое исключение, должна завершить исполнение.