<div dir="ltr">You are right. Thanks.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Apr 25, 2014 at 7:38 PM, Jason Greene <span dir="ltr">&lt;<a href="mailto:jason.greene@redhat.com" target="_blank">jason.greene@redhat.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">A worker is definitely being used. However, the behavior you are seeing is happening because your web browser is reusing the same connection to issue the second request. If you execute multiple curl commands you should see processing concurrently.<br>

<div><div class="h5"><br>
On Apr 25, 2014, at 1:29 PM, Dragan Jotanovic &lt;<a href="mailto:draganj@gmail.com">draganj@gmail.com</a>&gt; wrote:<br>
<br>
&gt; Hi,<br>
&gt; I did some testing with servlet deployment on undertow and it seems that servlet requests are always executed on IO thread instead of dispatched to worker threads.<br>
&gt;<br>
&gt; Basically I used modified servlet example from undertow github (I just added Thread.sleep(5000) to servlet). When I send request simultaneously from two browser tabs, first request is retrieved after 5 seconds as expected, but the second after 10 seconds, which means that IO thread was blocked until first request was completed.<br>

&gt; Is there some configuration parameter in DeploymentInfo which forces request to be dispatched to worker threads, or is there some other way to prevent IO thread from blocking?<br>
&gt;<br>
&gt; Bellow is the example source:<br>
&gt;<br>
&gt; import javax.servlet.ServletConfig;<br>
&gt; import javax.servlet.ServletException;<br>
&gt; import javax.servlet.http.HttpServlet;<br>
&gt; import javax.servlet.http.HttpServletRequest;<br>
&gt; import javax.servlet.http.HttpServletResponse;<br>
&gt;<br>
&gt; import io.undertow.Handlers;<br>
&gt; import io.undertow.Undertow;<br>
&gt; import io.undertow.server.HttpHandler;<br>
&gt; import io.undertow.server.handlers.PathHandler;<br>
&gt; import io.undertow.servlet.api.DeploymentInfo;<br>
&gt; import io.undertow.servlet.api.DeploymentManager;<br>
&gt;<br>
&gt; import java.io.IOException;<br>
&gt; import java.io.PrintWriter;<br>
&gt;<br>
&gt; import static io.undertow.servlet.Servlets.defaultContainer;<br>
&gt; import static io.undertow.servlet.Servlets.deployment;<br>
&gt; import static io.undertow.servlet.Servlets.servlet;<br>
&gt;<br>
&gt; public class TestServer {<br>
&gt;     public static class TestServlet extends HttpServlet {<br>
&gt;         @Override<br>
&gt;         public void init(final ServletConfig config) throws ServletException {<br>
&gt;             super.init(config);<br>
&gt;         }<br>
&gt;<br>
&gt;         @Override<br>
&gt;         protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {<br>
&gt;             try {<br>
&gt;                 Thread.sleep(5000);<br>
&gt;             } catch (InterruptedException e) {<br>
&gt;                 e.printStackTrace();<br>
&gt;             }<br>
&gt;             PrintWriter writer = resp.getWriter();<br>
&gt;             writer.write(&quot;Done!&quot;);<br>
&gt;             writer.close();<br>
&gt;         }<br>
&gt;<br>
&gt;         @Override<br>
&gt;         protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {<br>
&gt;             doGet(req, resp);<br>
&gt;         }<br>
&gt;     }<br>
&gt;<br>
&gt;     public static void main(String[] args) {<br>
&gt;         try {<br>
&gt;             String context = &quot;/&quot;;<br>
&gt;             DeploymentInfo servletBuilder = deployment()<br>
&gt;                     .setClassLoader(TestServer.class.getClassLoader())<br>
&gt;                     .setContextPath(context)<br>
&gt;                     .setDeploymentName(&quot;test.war&quot;)<br>
&gt;                     .addServlets(<br>
&gt;                             servlet(&quot;TestServlet&quot;, TestServer.TestServlet.class)<br>
&gt;                                     .addMapping(&quot;/*&quot;));<br>
&gt;<br>
&gt;             DeploymentManager manager = defaultContainer().addDeployment(servletBuilder);<br>
&gt;             manager.deploy();<br>
&gt;<br>
&gt;             HttpHandler servletHandler = manager.start();<br>
&gt;             PathHandler path = Handlers.path(Handlers.redirect(context))<br>
&gt;                     .addPrefixPath(context, servletHandler);<br>
&gt;             Undertow server = Undertow.builder()<br>
&gt;                     .addHttpListener(8181, &quot;0.0.0.0&quot;)<br>
&gt;                     .setHandler(path)<br>
&gt;                     .build();<br>
&gt;             server.start();<br>
&gt;         } catch (ServletException e) {<br>
&gt;             throw new RuntimeException(e);<br>
&gt;         }<br>
&gt;     }<br>
&gt; }<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; undertow-dev mailing list<br>
&gt; <a href="mailto:undertow-dev@lists.jboss.org">undertow-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/undertow-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/undertow-dev</a><br>
<br>
--<br>
Jason T. Greene<br>
WildFly Lead / JBoss EAP Platform Architect<br>
JBoss, a division of Red Hat<br>
<br>
</blockquote></div><br></div>