Как я вижу в спецификации JMS, connection.stop () не может быть вызван из onMessage () для асинхронного MessageListener. Не могли бы вы посоветовать подходящее место для вызова connection.stop (), чтобы приостановить доставку входящих сообщений и не получить исключение: "JMSCC0012: метод stop ()" может не работать вызывается из прослушивателя сообщений. " и автоматически возобновляет соединение после некоторого события? Каковы лучшие практики использования connection.stop ()?
Из спецификации JMS 2.0:
6.1.5. Приостановка доставки входящих сообщений Если при вызове stop запущены какие-либо прослушиватели сообщений, stop должен дождаться, пока все они не вернутся, прежде чем он сможет вернуться. Пока эти прослушиватели сообщений завершают свою работу, им должны быть доступны все службы подключения. Слушатель сообщений не должен пытаться разорвать собственное соединение, так как это может привести к тупиковой ситуации. Провайдер JMS должен обнаружить это и выбросить исключение javax.jms.IllegalStateException.
Из jms 1.1:
4.3.4 Приостановка доставки входящих сообщений Если MessageListeners запущены при вызове stop, stop должен дождаться, пока все они не вернутся, прежде чем он сможет вернуться. Пока эти MessageListeners завершают свою работу, им должны быть доступны все службы соединения.