0

Почему исключения SpyJMSExceptions все еще возникают после переработки клиентского соединения JBoss с удаленными очередями?

9

Проблема с соединением JNDI/JMS между JBoss 7.2.0 и JBoss 4.2.1

У меня есть приложение, которое работает как клиент на системе JBoss 7.2.0 и связывается с приемником JNDI/JMS на JBoss 4.2.1. Оно создает очереди для отправки и получения сообщений. В течение двух месяцев все работало прекрасно, без каких-либо изменений на обеих сторонах. Локальное клиентское приложение имеет установленные jbossall-client.jar и jnp-client.jar версии 4.2.1.

После нормальной работы мы начали получать исключение:

org.jboss.mq.SpyJMSException: Exiting on IOE; - nested throwable: (java.io.EOFException)

Мы перезапустили JBoss 7.2.0, ничего не меняя, и при создании очереди для получения сообщений получили новое исключение:

org.jboss.mq.SpyJMSException: Cannot subscribe to this Destination: ; {...} Caused by: java.io.EOFException

Это исключение возникает в строке:

QueueReceiver receiver = session.createReceiver(queue);

Такое же исключение также появляется после нескольких дней нормальной работы приложения, особенно после длительных периодов без активности.

Мы перезапустили систему JBoss 4.2.1, чтобы проверить, в этом ли проблема, но это не помогло. На самом деле, мы можем воспроизвести эту ситуацию, если оба системы подключены как обычно, а затем перезапустить систему 4.2.1. Ошибки начинают появляться, когда система 4.2.1 находится в состоянии выключения, и JBoss 7.2.0 не может восстановить соединения после повторного включения 4.2.1 (даже когда это должно быть возможно).

Остановка и перезапуск приложения в JBoss не решает проблему. Перезапуск JBoss имеет 20% шансов на успех (100% в случае принудительного сбоя, как описано выше). Обычно, удаление и повторное развертывание приложения также решает эту проблему.

Что может быть причиной этого?

Этот же WAR-файл работает без проблем в нашей тестовой системе с идентичной конфигурацией JBoss. Общение с целевой системой JBoss через тестовое приложение из командной строки работает исправно.

Я подозреваю, что проблема может быть в JBoss 7.2.0, или это может быть связано с истечением времени ожидания? Как можно проверить или увеличить время ожидания? Возможно ли сделать это с клиентской стороны? Даже если это замедление, я вызываю метод stop() перед повторным подключением через start(), и я все равно получаю это исключение; в этом случае это не должно быть связано с таймаутом, так как он бы сбросился.

Значения контекста:

connectionFactoryName=ConnectionFactory
contextFactoryName=org.jnp.interfaces.NamingContextFactory
packagePrefixes=org.jboss.naming:org.jnp.interfaces
providerUrl=MYSERVER:1099

Java-код:

(Приведенный код Java остается без изменений.)

Вывод логов:

(Вывод логов остается без изменений.)

Трассировка исключений после нормальной работы:

(Трассировка исключений остается без изменений.)

Трассировка исключений после перезапуска:

(Трассировка исключений остается без изменений.)

Надеюсь, кто-то сможет помочь разобраться с этой проблемой!

1 ответ(ов)

0

Как было указано в вопросе, сервер JBoss был обновлён с версии 4.2.1 до 7.1.1 Final. Обновление решило проблему, и клиент теперь работает как ожидается, но, к сожалению, это решение не объясняет саму проблему.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь