Повторное сообщение об ошибке «java.lang.IllegalStateException: не удается переслать после подтверждения ответа» с Grails и Tomcat. - PullRequest
1 голос
/ 07 марта 2012

Пожалуйста, смотрите мою запись в списке рассылки Grails.По сути, я получаю сообщение об ошибке «Не удается переслать после подтверждения ответа» с Grails 2.x после каждых нескольких запросов.Это происходит для всех типов URL, контроллеров, GSP, файлов CSS, файлов JS и даже файлов изображений.Я пробовал Grails 2.0.0 и Grails 2.0.1 с Tomcat 6.0.35 и Tomcat 7.0.25 на 32-битной Windows XP, 32-битной Windows 7 и 64-битной Centos.Ошибка возникает во всех этих комбинациях.

Как я уже упоминал в моем посте , в нашем коде нет операторов response.redirect или response.forward.Это вызывает серьезную проблему в нашем производственном приложении, поэтому нужна помощь в определении того, что еще можно посмотреть, чтобы решить проблему.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Это было решено.В одном из контроллеров в приложении поток вывода ответа непосредственно записывался, но не закрывался явно после завершения операции.Кажется, Tomcat и Jetty перезаписывают объекты ответа.Если объект ответа, для которого ранее не был закрыт выходной поток, был повторно использован для будущего запроса и для него было выполнено перенаправление, перенаправление завершилось ошибкой.

Код был изменен, а ошибка исчезла.Извлеченный урок состоит в том, что каждый раз, когда возникает такая ошибка, сканируйте всю кодовую базу для прямого доступа к выходному потоку ответа и ответственно закрывайте выходной поток перед существующими методами контроллера.

0 голосов
/ 07 марта 2012

Вам следует создать новое приложение Grails и самостоятельно перемещать контроллеры, домены и т. Д., А не обновлять Grails.

Когда вы это сделаете, убедитесь, что вы заглянули в файлы конфигурации Grails.

Также посмотрите, какие плагины у вас есть.

Кроме того, при перемещении файлов время от времени пробуйте приложение, когда это возможно, и, возможно, вы сможете определить, когда возникает ошибка. Начните с того, что попробуете это в вашем самом простом контроллере и посмотрите, есть ли ошибка и тогда.

Удачи.

...