Undertow 1.1.0.Final has been released

Undertow 1.1.0.Final has been released, and is available from maven central. This release brings a number of improvements including:

  • Websockets 1.1

  • SPDY support

  • Many bug fixes

More details on websocket improvements and SPDY support will be coming in new blog posts in the coming weeks.

Undertow now supports HTTP2 Draft 15

The Undertow 1.2 branch now supports the latest draft of the HTTP2 spec. We have a demo site up and running at https://http2.undertow.io.

So far, we have verified HTTP/2 interop with the following browsers:

  • Chrome Canary (41.0.2217.0)

  • Firefox (Nightly build of 36.01a)

  • Internet Explorer (Windows 10 Preview)

The demo site contains instructions for testing it out, including getting it running locally. The HTTP2 code is still quite new, and will be evolving a lot over the coming months. For now most features of HTTP2 are supported, with the exception of priority, which is ignored.

Undertow 1.0.0.Beta1 Released

Undertow is a high performance non-blocking webserver that is the new web server in Wildfly.

Some notable features include:

  • HTTP upgrade support - This enables management and EJB invocations to be multiplexed over the web port without any performance loss

  • Websocket support, including JSR-356

  • Servlet 3.1 support

  • Ability to mix non-blocking handlers with Servlet

Undertow is completely standalone, starts in milliseconds, and has a fluent builder API for building deployments. This all makes it well suited for use in unit tests. An example of setting up an embedded servlet deployment is shown below:

One of the goals of Undertow was to have great performance and I am happy to say so far we have surpassed our own expectations. Against the competition Undertow comes out ahead on every internal test we have run, and this is also represented in a third party benchmark by Tech Empower (the benchmarks that were posted to the core a while back), where it comes in as the fastest Java web server (and in many of the tests as the fastest server overall).

The results are listed here:

If anyone want to participate the dev list is undertow-dev@lists.jboss.org and we hang out on #undertow on freenode.

Some examples

Embedded Servlet Deployment
DeploymentInfo servletBuilder = deployment()
        .setClassLoader(ServletServer.class.getClassLoader())
        .setContextPath("/myapp")
        .setDeploymentName("test.war")
        .addServlets(
                servlet("MessageServlet", MessageServlet.class)
                        .addInitParam("message", "Hello World")
                        .addMapping("/*"),
                servlet("MyServlet", MessageServlet.class)
                        .addInitParam("message", "MyServlet")
                        .addMapping("/myservlet"));

DeploymentManager manager = defaultContainer().addDeployment(servletBuilder);
manager.deploy();

Undertow server = Undertow.builder()
        .addListener(8080, "localhost")
        .setHandler(manager.start())
        .build();
server.start();
Simple non-blocking handler
Undertow server = Undertow.builder()
        .addListener(8080, "localhost")
        .setHandler(new HttpHandler() {
            @Override
            public void handleRequest(final HttpServerExchange exchange) throws Exception {
                exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                exchange.getResponseSender().send("Hello World");
            }
        }).build();
server.start();