[
https://issues.apache.org/jira/browse/FELIX-4840?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14392473#comment-14392473
]
Balazs Zsoldos commented on FELIX-4840:
---------------------------------------
I am not sure HTTPService implementation should be changed at all. It is up to
the servlet if async is supported or not. In case of WebConsole, there are two
different situations:
*A full page is rendered*
In this case async is not supported. I do not think async is an issue as
plugins would not want to (and cannot) render their fragments asynchronously.
*The request is simply dispatched to the plugin*
This happens if the end of the uri neither ends with extension nor the
extension is _.html_. When such a request comes, Webconsole should not call any
function on the response By calling _flushBuffer()_, webconsole horns in on the
lifecycle of the response although it should not.
> Asynchronous IO fails in webconsole plugin
> ------------------------------------------
>
> Key: FELIX-4840
> URL: https://issues.apache.org/jira/browse/FELIX-4840
> Project: Felix
> Issue Type: Bug
> Components: Web Console
> Affects Versions: webconsole-4.2.8
> Reporter: Balazs Zsoldos
>
> *Issue*
> The following function call always returns with true:
> {code:java}
> ServletRequest.isAsyncSupported()
> {code}
> However, async calls fail even if the webconsole plugin tries to provide some
> resource (with some special extension on the end of the URI).
> *Reason*
> In the end of the _OSGiManager.service(ServletRequest, ServletResponse)_
> function, there is the following:
> {code:java}
> // ensure response has been sent back and response is committed
> // (we are authorative for our URL space and no other servlet should
> interfere)
> res.flushBuffer();
> {code}
> Due to the reason that _flushBuffer()_ function is called, any asynchronous
> handling will fail with an exception.
> *Proposed solution*
> - In case the webconsole plugin is rendered (the path ends with / or .html),
> the _request.isAsyncSupported()_ method call should return false
> - In case a custom resource is provided by the webconsole plugin (any
> extension but html on the end of the path) the _flushBuffer()_ method should
> not be called
> At least the second part of the fix should be implemented as if a plugin
> wants to provide bigger files (like a dump), async support can be useful.
> Also, by the time more and more libraries will support asynchronous IO to
> provide resources and if a webconsole plugin uses such library, it will fail.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)