[jira] [Updated] (CAMEL-11731) Servlet Component isn't really async
[ https://issues.apache.org/jira/browse/CAMEL-11731?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Claus Ibsen updated CAMEL-11731: Fix Version/s: (was: 2.20.0) Future > Servlet Component isn't really async > > > Key: CAMEL-11731 > URL: https://issues.apache.org/jira/browse/CAMEL-11731 > Project: Camel > Issue Type: Improvement > Components: camel-servlet >Affects Versions: 2.18.4, 2.19.2 > Environment: All >Reporter: Nick Houghton > Fix For: Future > > > So my assumption reading the servlet component doco is that with 2.18+ and a > Servlet 3+ container, the component supports async, which it kind of does > with the async=true init config, and there is even a method in CamelServlet > called "doServiceAsync" but from what i can tell it doesn't really do it in a > asynchronous manner, where there are no blocked threads while a request is > awaiting an async operation (like an AHC call for example). > Looking at: > https://github.com/apache/camel/blob/master/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java > While processing a request, we check if we are in async mode and call > doServiceAsync.. > {code:java} > @Override > protected final void service(HttpServletRequest req, HttpServletResponse > resp) throws ServletException, IOException { > if (isAsync()) { > final AsyncContext context = req.startAsync(); > //run async > context.start(() -> doServiceAsync(context)); > } else { > doService(req, resp); > } > } > {code} > then in doServiceAsync() we call doService().. and then we call > getProcessor().process(exchange), not process(exchange, asyncCallback) which > is the proper async method.. > {code:java} > try { > if (log.isTraceEnabled()) { > log.trace("Processing request for exchangeId: {}", > exchange.getExchangeId()); > } > // process the exchange > consumer.getProcessor().process(exchange); > } catch (Exception e) { > exchange.setException(e); > } > {code} > So the actual behaviour is an inbound request in async mode that ends up just > blocking waiting for the request to complete, in a totally sync manner. I > presume this is not the desired behaviour? > It seems the fix would be to move the doService() logic to doServiceAsync() > and have doService() call it and use the AsyncProcessorConverterHelper. Or > the other alternative would be to update the documentation to explicitly note > that it is actually not async at all. > I can probably PR it in, just wanted to get thoughts on the actual intention. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Updated] (CAMEL-11731) Servlet Component isn't really async
[ https://issues.apache.org/jira/browse/CAMEL-11731?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Claus Ibsen updated CAMEL-11731: Issue Type: Improvement (was: Bug) > Servlet Component isn't really async > > > Key: CAMEL-11731 > URL: https://issues.apache.org/jira/browse/CAMEL-11731 > Project: Camel > Issue Type: Improvement > Components: camel-servlet >Affects Versions: 2.18.4, 2.19.2 > Environment: All >Reporter: Nick Houghton > Fix For: 2.20.0 > > > So my assumption reading the servlet component doco is that with 2.18+ and a > Servlet 3+ container, the component supports async, which it kind of does > with the async=true init config, and there is even a method in CamelServlet > called "doServiceAsync" but from what i can tell it doesn't really do it in a > asynchronous manner, where there are no blocked threads while a request is > awaiting an async operation (like an AHC call for example). > Looking at: > https://github.com/apache/camel/blob/master/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java > While processing a request, we check if we are in async mode and call > doServiceAsync.. > {code:java} > @Override > protected final void service(HttpServletRequest req, HttpServletResponse > resp) throws ServletException, IOException { > if (isAsync()) { > final AsyncContext context = req.startAsync(); > //run async > context.start(() -> doServiceAsync(context)); > } else { > doService(req, resp); > } > } > {code} > then in doServiceAsync() we call doService().. and then we call > getProcessor().process(exchange), not process(exchange, asyncCallback) which > is the proper async method.. > {code:java} > try { > if (log.isTraceEnabled()) { > log.trace("Processing request for exchangeId: {}", > exchange.getExchangeId()); > } > // process the exchange > consumer.getProcessor().process(exchange); > } catch (Exception e) { > exchange.setException(e); > } > {code} > So the actual behaviour is an inbound request in async mode that ends up just > blocking waiting for the request to complete, in a totally sync manner. I > presume this is not the desired behaviour? > It seems the fix would be to move the doService() logic to doServiceAsync() > and have doService() call it and use the AsyncProcessorConverterHelper. Or > the other alternative would be to update the documentation to explicitly note > that it is actually not async at all. > I can probably PR it in, just wanted to get thoughts on the actual intention. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Updated] (CAMEL-11731) Servlet Component isn't really async
[ https://issues.apache.org/jira/browse/CAMEL-11731?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Claus Ibsen updated CAMEL-11731: Fix Version/s: 2.20.0 > Servlet Component isn't really async > > > Key: CAMEL-11731 > URL: https://issues.apache.org/jira/browse/CAMEL-11731 > Project: Camel > Issue Type: Bug > Components: camel-servlet >Affects Versions: 2.18.4, 2.19.2 > Environment: All >Reporter: Nick Houghton > Fix For: 2.20.0 > > > So my assumption reading the servlet component doco is that with 2.18+ and a > Servlet 3+ container, the component supports async, which it kind of does > with the async=true init config, and there is even a method in CamelServlet > called "doServiceAsync" but from what i can tell it doesn't really do it in a > asynchronous manner, where there are no blocked threads while a request is > awaiting an async operation (like an AHC call for example). > Looking at: > https://github.com/apache/camel/blob/master/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java > While processing a request, we check if we are in async mode and call > doServiceAsync.. > {code:java} > @Override > protected final void service(HttpServletRequest req, HttpServletResponse > resp) throws ServletException, IOException { > if (isAsync()) { > final AsyncContext context = req.startAsync(); > //run async > context.start(() -> doServiceAsync(context)); > } else { > doService(req, resp); > } > } > {code} > then in doServiceAsync() we call doService().. and then we call > getProcessor().process(exchange), not process(exchange, asyncCallback) which > is the proper async method.. > {code:java} > try { > if (log.isTraceEnabled()) { > log.trace("Processing request for exchangeId: {}", > exchange.getExchangeId()); > } > // process the exchange > consumer.getProcessor().process(exchange); > } catch (Exception e) { > exchange.setException(e); > } > {code} > So the actual behaviour is an inbound request in async mode that ends up just > blocking waiting for the request to complete, in a totally sync manner. I > presume this is not the desired behaviour? > It seems the fix would be to move the doService() logic to doServiceAsync() > and have doService() call it and use the AsyncProcessorConverterHelper. Or > the other alternative would be to update the documentation to explicitly note > that it is actually not async at all. > I can probably PR it in, just wanted to get thoughts on the actual intention. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Updated] (CAMEL-11731) Servlet Component isn't really async
[ https://issues.apache.org/jira/browse/CAMEL-11731?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Claus Ibsen updated CAMEL-11731: Estimated Complexity: Moderate (was: Unknown) > Servlet Component isn't really async > > > Key: CAMEL-11731 > URL: https://issues.apache.org/jira/browse/CAMEL-11731 > Project: Camel > Issue Type: Bug > Components: camel-servlet >Affects Versions: 2.18.4, 2.19.2 > Environment: All >Reporter: Nick Houghton > Fix For: 2.20.0 > > > So my assumption reading the servlet component doco is that with 2.18+ and a > Servlet 3+ container, the component supports async, which it kind of does > with the async=true init config, and there is even a method in CamelServlet > called "doServiceAsync" but from what i can tell it doesn't really do it in a > asynchronous manner, where there are no blocked threads while a request is > awaiting an async operation (like an AHC call for example). > Looking at: > https://github.com/apache/camel/blob/master/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java > While processing a request, we check if we are in async mode and call > doServiceAsync.. > {code:java} > @Override > protected final void service(HttpServletRequest req, HttpServletResponse > resp) throws ServletException, IOException { > if (isAsync()) { > final AsyncContext context = req.startAsync(); > //run async > context.start(() -> doServiceAsync(context)); > } else { > doService(req, resp); > } > } > {code} > then in doServiceAsync() we call doService().. and then we call > getProcessor().process(exchange), not process(exchange, asyncCallback) which > is the proper async method.. > {code:java} > try { > if (log.isTraceEnabled()) { > log.trace("Processing request for exchangeId: {}", > exchange.getExchangeId()); > } > // process the exchange > consumer.getProcessor().process(exchange); > } catch (Exception e) { > exchange.setException(e); > } > {code} > So the actual behaviour is an inbound request in async mode that ends up just > blocking waiting for the request to complete, in a totally sync manner. I > presume this is not the desired behaviour? > It seems the fix would be to move the doService() logic to doServiceAsync() > and have doService() call it and use the AsyncProcessorConverterHelper. Or > the other alternative would be to update the documentation to explicitly note > that it is actually not async at all. > I can probably PR it in, just wanted to get thoughts on the actual intention. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Updated] (CAMEL-11731) Servlet Component isn't really async
[ https://issues.apache.org/jira/browse/CAMEL-11731?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Nick Houghton updated CAMEL-11731: -- Priority: Major (was: Minor) > Servlet Component isn't really async > > > Key: CAMEL-11731 > URL: https://issues.apache.org/jira/browse/CAMEL-11731 > Project: Camel > Issue Type: Bug > Components: camel-servlet >Affects Versions: 2.18.4, 2.19.2 > Environment: All >Reporter: Nick Houghton > > So my assumption reading the servlet component doco is that with 2.18+ and a > Servlet 3+ container, the component supports async, which it kind of does > with the async=true init config, and there is even a method in CamelServlet > called "doServiceAsync" but from what i can tell it doesn't really do it in a > asynchronous manner, where there are no blocked threads while a request is > awaiting an async operation (like an AHC call for example). > Looking at: > https://github.com/apache/camel/blob/master/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java > While processing a request, we check if we are in async mode and call > doServiceAsync.. > {code:java} > @Override > protected final void service(HttpServletRequest req, HttpServletResponse > resp) throws ServletException, IOException { > if (isAsync()) { > final AsyncContext context = req.startAsync(); > //run async > context.start(() -> doServiceAsync(context)); > } else { > doService(req, resp); > } > } > {code} > then in doServiceAsync() we call doService().. and then we call > getProcessor().process(exchange), not process(exchange, asyncCallback) which > is the proper async method.. > {code:java} > try { > if (log.isTraceEnabled()) { > log.trace("Processing request for exchangeId: {}", > exchange.getExchangeId()); > } > // process the exchange > consumer.getProcessor().process(exchange); > } catch (Exception e) { > exchange.setException(e); > } > {code} > So the actual behaviour is an inbound request in async mode that ends up just > blocking waiting for the request to complete, in a totally sync manner. I > presume this is not the desired behaviour? > It seems the fix would be to move the doService() logic to doServiceAsync() > and have doService() call it and use the AsyncProcessorConverterHelper. Or > the other alternative would be to update the documentation to explicitly note > that it is actually not async at all. > I can probably PR it in, just wanted to get thoughts on the actual intention. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Updated] (CAMEL-11731) Servlet Component isn't really async
[ https://issues.apache.org/jira/browse/CAMEL-11731?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Nick Houghton updated CAMEL-11731: -- Priority: Minor (was: Major) > Servlet Component isn't really async > > > Key: CAMEL-11731 > URL: https://issues.apache.org/jira/browse/CAMEL-11731 > Project: Camel > Issue Type: Bug > Components: camel-servlet >Affects Versions: 2.18.4, 2.19.2 > Environment: All >Reporter: Nick Houghton >Priority: Minor > > So my assumption reading the servlet component doco is that with 2.18+ and a > Servlet 3+ container, the component supports async, which it kind of does > with the async=true init config, and there is even a method in CamelServlet > called "doServiceAsync" but from what i can tell it doesn't really do it in a > asynchronous manner, where there are no blocked threads while a request is > awaiting an async operation (like an AHC call for example). > Looking at: > https://github.com/apache/camel/blob/master/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java > While processing a request, we check if we are in async mode and call > doServiceAsync.. > {code:java} > @Override > protected final void service(HttpServletRequest req, HttpServletResponse > resp) throws ServletException, IOException { > if (isAsync()) { > final AsyncContext context = req.startAsync(); > //run async > context.start(() -> doServiceAsync(context)); > } else { > doService(req, resp); > } > } > {code} > then in doServiceAsync() we call doService().. and then we call > getProcessor().process(exchange), not process(exchange, asyncCallback) which > is the proper async method.. > {code:java} > try { > if (log.isTraceEnabled()) { > log.trace("Processing request for exchangeId: {}", > exchange.getExchangeId()); > } > // process the exchange > consumer.getProcessor().process(exchange); > } catch (Exception e) { > exchange.setException(e); > } > {code} > So the actual behaviour is an inbound request in async mode that ends up just > blocking waiting for the request to complete, in a totally sync manner. I > presume this is not the desired behaviour? > It seems the fix would be to move the doService() logic to doServiceAsync() > and have doService() call it and use the AsyncProcessorConverterHelper. Or > the other alternative would be to update the documentation to explicitly note > that it is actually not async at all. > I can probably PR it in, just wanted to get thoughts on the actual intention. -- This message was sent by Atlassian JIRA (v6.4.14#64029)