Ответ 1
Ahhh... старая исключение/пересоединение.
Есть некоторые поставщики транспорта, которые автоматически подключат ваше приложение к вам и к тем, кто заново подключится к приложению. В общем случае пересоединения скрывают исключение из приложения. Нижняя сторона заключается в том, что вы не хотите, чтобы приложение зависало вечно, если все удаленные узлы обмена сообщениями так опущены, в конечном счете, вы должны включить некоторую логику пересоединения.
Теперь вот интересная часть - как вы обрабатываете исключения в нейтральном режиме провайдера? Исключение JMS практически бесполезно. Например, "исключение безопасности" может быть в том, что политики безопасности Java слишком ограничены, что разрешения файловой системы слишком ограничены, что учетные данные LDAP не удались, что соединение с транспортом завершилось неудачно, что открытие очереди или темы не удалось или какой-либо из десятков других проблем, связанных с безопасностью. Это связанное исключение, в котором есть данные от поставщика транспорта, которые действительно помогают отладить проблему. Мои клиенты обычно использовали один из трех разных способов...
- Относитесь ко всем ошибкам. Закройте все объекты и повторите их инициализацию. это портативный JMS.
- Разрешить приложению проверять связанные исключения для различения фатальных и переходных ошибок (т.е. ошибка auth и полная очередь). Не поставщик переносимый.
- Типы обработки ошибок, специфичные для провайдера. Гибрид двух других.
В вашем случае объекты очереди и темы, вероятно, действительны только в контексте исходного соединения. Предполагая, что провайдер, который автоматически подключится к тому факту, что вы получили исключение, означает, что пересоздание завершилось неудачно, и контекст для объектов очереди и темы не удалось восстановить. Закройте все объекты и снова подключитесь.
Если вы хотите сделать что-то более специфичное для провайдера, например, провести различие между временными и перманентными ошибками, это одно из тех, "зависящих" от вещей, и вам придется разобраться в каждом конкретном случае.