Джерси: как распознать, когда соединение закрыто - PullRequest
1 голос
/ 26 июня 2011

Если у меня длинный ожидающий запрос (например, поток, обрабатывающий его, заблокирован, пока другой не предоставит некоторые данные), то к тому времени, когда ответ будет готов, клиент мог отключиться. Есть ли способ обнаружить это в методе, который обрабатывает запрос? То есть не вернуть ответ и увидеть исключения IO выброса причала / свитера.

1 Ответ

0 голосов
/ 27 ноября 2011

Вы не можете сказать, что соединение разорвано, пока не попробуете отправить что-то по соединению, и оно не сможет (бросает IOException).

Я храню карту LinkedBlockingDeque с (отображаемую по идентификатору внешней системы, принимающей живой поток) в одноэлементном EJB. Когда происходит какое-то событие, которое необходимо опубликовать в прямом эфире, я просто ставлю событие в очередь через этот синглтон-бин. На другом конце очереди - если он подключен - находится веб-служба JAX-RS, ожидающая, когда элемент станет доступным. Теперь причина, по которой я использую deque вместо очереди, заключается в том, что IOException может быть выброшено при записи и / или очистке OutputStream, что указывает на то, что клиент, скорее всего, отключился. С помощью очереди можно просто вернуть этот элемент, чтобы он был первым, который будет использован при следующем подключении внешней системы.

...