Pergunta

Eu tenho um filtro Tomcat que delega solicitações para um objeto de manipulação dependendo da URL.Este é o único filtro no FilterChain.Eu tenho um aplicativo Ajax que martela esse filtro com muitas solicitações.

Recentemente notei um problema em que o filtro doFilter O método é frequentemente chamado com uma resposta confirmada como parâmetro (internamente, é a resposta do coiote que está marcada como confirmada).

Parece-me que a única maneira de isso acontecer é se o recycle() O método não é chamado nesta resposta do coiote.Verifiquei para ter certeza de que não estou mantendo referências a nenhum objeto de solicitação, resposta, outputStream ou gravador.Além disso, certifiquei-me de fechar o outputStream em um bloco final.No entanto, isso não resolve o problema.

Parece que estou fazendo algo para abusar do contêiner do servlet, mas estou tendo problemas para rastreá-lo.

Foi útil?

Solução

Eu tentei usar o Tomcat 6.16 e 6.18.Este é definitivamente o único filtro da cadeia.

Parece que algo está mantendo uma referência ao servlet outputStream.Envolvi o ServletOutputStream em meu próprio OutputStream e depois certifiquei-me de que a referência foi destruída.Isso corrigiu o problema para que eu não veja mais uma resposta confirmada transmitida.

Este é um estranho efeito colateral de manter uma referência.Mas não acho que isso se qualifique como um bug do Tomcat.É mais provável que seja um bug em ImageIO.createImageOutputStream() que suspeito estar mantendo a referência.

Outras dicas

Qual versão do Tomcat você está usando?Para mim, isso parece um bug no Tomcat, não consigo pensar em nenhum motivo pelo qual seu método doFilter deva ser chamado com uma resposta que já foi confirmada (se esse filtro for o único na cadeia, você tem certeza disso? ).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top