Skip to content

Commit

Permalink
Break undertow out in to its own module.
Browse files Browse the repository at this point in the history
This makes it easier to exclude when using EAP.
  • Loading branch information
tobias committed Jul 14, 2015
1 parent 9a09fb1 commit e895a4a
Show file tree
Hide file tree
Showing 20 changed files with 121 additions and 54 deletions.
1 change: 1 addition & 0 deletions modules/pom.xml
Expand Up @@ -22,6 +22,7 @@
<module>scheduling</module>
<module>caching</module>
<module>web</module>
<module>web-undertow</module>
<module>transactions</module>
<module>as-support</module>

Expand Down
72 changes: 72 additions & 0 deletions modules/web-undertow/pom.xml
@@ -0,0 +1,72 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<parent>
<groupId>org.projectodd.wunderboss</groupId>
<artifactId>wunderboss-modules</artifactId>
<version>0.8.2-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>

<groupId>org.projectodd.wunderboss</groupId>
<artifactId>wunderboss-web-undertow</artifactId>
<name>WunderBoss Undertow Web Module</name>

<packaging>jar</packaging>

<properties>
<version.undertow>1.1.0.Final</version.undertow>
</properties>

<dependencies>
<dependency>
<groupId>org.projectodd.wunderboss</groupId>
<artifactId>wunderboss-core</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.projectodd.wunderboss</groupId>
<artifactId>wunderboss-web</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-core</artifactId>
<version>${version.undertow}</version>
</dependency>

<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-servlet</artifactId>
<version>${version.undertow}</version>
</dependency>

<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-websockets-jsr</artifactId>
<version>${version.undertow}</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>com.theoryinpractise</groupId>
<artifactId>clojure-maven-plugin</artifactId>
<executions>
<execution>
<id>test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web;
package org.projectodd.wunderboss.web.undertow;

import io.undertow.Handlers;
import io.undertow.Undertow;
Expand Down Expand Up @@ -42,6 +42,7 @@
import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
import org.projectodd.wunderboss.Options;
import org.projectodd.wunderboss.WunderBoss;
import org.projectodd.wunderboss.web.Web;
import org.slf4j.Logger;
import org.xnio.OptionMap;
import org.xnio.Xnio;
Expand All @@ -59,9 +60,6 @@
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;

import static org.projectodd.wunderboss.web.Web.CreateOption.*;
import static org.projectodd.wunderboss.web.Web.RegisterOption.*;

public class UndertowWeb implements Web<HttpHandler> {

public UndertowWeb(String name, Options<CreateOption> opts) {
Expand Down Expand Up @@ -100,15 +98,15 @@ public Undertow undertow() {
}

private void configure(Options<CreateOption> options) {
autoStart = options.getBoolean(AUTO_START);
Undertow.Builder builder = (Undertow.Builder) options.get(CONFIGURATION);
autoStart = options.getBoolean(CreateOption.AUTO_START);
Undertow.Builder builder = (Undertow.Builder) options.get(CreateOption.CONFIGURATION);
if (builder != null) {
undertow = builder
.setHandler(Handlers.header(pathology.handler(), Headers.SERVER_STRING, "undertow"))
.build();
} else {
int port = options.getInt(PORT);
String host = options.getString(HOST);
int port = options.getInt(CreateOption.PORT);
String host = options.getString(CreateOption.HOST);
undertow = Undertow.builder()
.addHttpListener(port, host)
.setHandler(Handlers.header(pathology.handler(), Headers.SERVER_STRING, "undertow"))
Expand All @@ -123,16 +121,16 @@ public boolean registerHandler(HttpHandler httpHandler, Map<RegisterOption, Obje

protected boolean registerHandler(HttpHandler httpHandler, Map<RegisterOption, Object> opts, Runnable cleanup) {
final Options<RegisterOption> options = new Options<>(opts);
final String context = options.getString(PATH);
final String context = options.getString(RegisterOption.PATH);

httpHandler = wrapWithSessionHandler(httpHandler);
if (options.has(STATIC_DIR)) {
httpHandler = wrapWithStaticHandler(httpHandler, options.getString(STATIC_DIR));
if (options.has(RegisterOption.STATIC_DIR)) {
httpHandler = wrapWithStaticHandler(httpHandler, options.getString(RegisterOption.STATIC_DIR));
}
if (options.getBoolean(DISPATCH)) {
if (options.getBoolean(RegisterOption.DISPATCH)) {
httpHandler = wrapWithDispatcher(httpHandler);
}
final boolean replacement = pathology.add(context, options.getList(VHOSTS), httpHandler);
final boolean replacement = pathology.add(context, options.getList(RegisterOption.VHOSTS), httpHandler);
if (cleanup != null) {
pathology.epilogue(httpHandler, cleanup);
}
Expand All @@ -147,8 +145,8 @@ protected boolean registerHandler(HttpHandler httpHandler, Map<RegisterOption, O
@Override
public boolean registerServlet(Servlet servlet, Map<RegisterOption, Object> opts) {
final Options<RegisterOption> options = new Options<>(opts);
final String context = options.getString(PATH);
final String servletName = options.getString(SERVLET_NAME);
final String context = options.getString(RegisterOption.PATH);
final String servletName = options.getString(RegisterOption.SERVLET_NAME);

Class servletClass = servlet.getClass();
final ServletInfo servletInfo = Servlets.servlet(servletName != null ? servletName : servletClass.getSimpleName(),
Expand Down Expand Up @@ -208,7 +206,7 @@ public void run() {
@Override
public boolean unregister(Map<RegisterOption, Object> opts) {
final Options<RegisterOption> options = new Options<>(opts);
return pathology.remove(options.getString(PATH), options.getList(VHOSTS));
return pathology.remove(options.getString(RegisterOption.PATH), options.getList(RegisterOption.VHOSTS));
}

@Override
Expand Down
Expand Up @@ -14,12 +14,13 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web;
package org.projectodd.wunderboss.web.undertow;

import org.projectodd.wunderboss.ComponentProvider;
import org.projectodd.wunderboss.Options;
import org.projectodd.wunderboss.web.Web;

public class WebProvider implements ComponentProvider<Web> {
public class UndertowWebProvider implements ComponentProvider<Web> {

@Override
public Web create(String name, Options opts) {
Expand Down
Expand Up @@ -14,9 +14,10 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web.async;
package org.projectodd.wunderboss.web.undertow.async;

import io.undertow.server.HttpServerExchange;
import org.projectodd.wunderboss.web.async.OutputStreamHttpChannel;

import java.io.OutputStream;

Expand Down
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web.async.websocket;
package org.projectodd.wunderboss.web.undertow.async.websocket;

import io.undertow.websockets.core.CloseMessage;
import io.undertow.websockets.core.WebSocketChannel;
Expand Down
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web.async.websocket;
package org.projectodd.wunderboss.web.undertow.async.websocket;

import io.undertow.websockets.core.WebSocketChannel;
import io.undertow.websockets.core.CloseMessage;
Expand Down
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web.async.websocket;
package org.projectodd.wunderboss.web.undertow.async.websocket;

import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
Expand Down
Expand Up @@ -14,16 +14,16 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web.async.websocket;
package org.projectodd.wunderboss.web.undertow.async.websocket;


import io.undertow.websockets.core.CloseMessage;
import io.undertow.websockets.core.WebSocketCallback;
import io.undertow.websockets.core.WebSocketChannel;
import io.undertow.websockets.core.WebSockets;
import io.undertow.websockets.spi.WebSocketHttpExchange;
import org.projectodd.wunderboss.web.async.Channel;
import org.projectodd.wunderboss.web.async.Util;
import org.projectodd.wunderboss.web.async.WebsocketUtil;
import org.projectodd.wunderboss.web.async.websocket.WebsocketChannelSkeleton;

import java.io.IOException;
import java.nio.ByteBuffer;
Expand Down Expand Up @@ -111,7 +111,7 @@ public void onError(WebSocketChannel channel, Void context, Throwable throwable)
this.underlyingChannel,
callback);
} else {
throw Util.wrongMessageType(message.getClass());
throw WebsocketUtil.wrongMessageType(message.getClass());
}

return true;
Expand Down
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web.async.websocket;
package org.projectodd.wunderboss.web.undertow.async.websocket;

import io.undertow.websockets.spi.WebSocketHttpExchange;

Expand Down
@@ -0,0 +1 @@
org.projectodd.wunderboss.web.undertow.UndertowWebProvider
Expand Up @@ -17,7 +17,8 @@
(:import org.projectodd.wunderboss.WunderBoss
org.projectodd.wunderboss.Options
io.undertow.server.HttpHandler
[org.projectodd.wunderboss.web Web UndertowWeb UndertowWeb$Pathology]))
org.projectodd.wunderboss.web.Web
[org.projectodd.wunderboss.web.undertow UndertowWeb UndertowWeb$Pathology]))

(def default (doto (WunderBoss/findOrCreateComponent Web) (.start)))

Expand Down
Expand Up @@ -14,10 +14,11 @@
* limitations under the License.
*/

package org.projectodd.wunderboss.web;
package org.projectodd.wunderboss.web.undertow;

import org.junit.Test;
import org.projectodd.wunderboss.WunderBoss;
import org.projectodd.wunderboss.web.Web;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
Expand Down
21 changes: 8 additions & 13 deletions modules/web/pom.xml
Expand Up @@ -16,7 +16,8 @@
<packaging>jar</packaging>

<properties>
<version.undertow>1.1.0.Final</version.undertow>
<version.javax-websocket>1.1.0.Final</version.javax-websocket>
<version.javax-servlet>1.0.0.Final</version.javax-servlet>
</properties>

<dependencies>
Expand All @@ -27,21 +28,15 @@
</dependency>

<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-core</artifactId>
<version>${version.undertow}</version>
<groupId>org.jboss.spec.javax.websocket</groupId>
<artifactId>jboss-websocket-api_1.1_spec</artifactId>
<version>${version.javax-websocket}</version>
</dependency>

<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-servlet</artifactId>
<version>${version.undertow}</version>
</dependency>

<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-websockets-jsr</artifactId>
<version>${version.undertow}</version>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.1_spec</artifactId>
<version>${version.javax-servlet}</version>
</dependency>
</dependencies>

Expand Down
Expand Up @@ -96,7 +96,7 @@ public synchronized boolean send(final Object message,
} else if (message instanceof byte[]) {
data = (byte[])message;
} else {
throw Util.wrongMessageType(message.getClass());
throw WebsocketUtil.wrongMessageType(message.getClass());
}

enqueue(new PendingSend(data, shouldClose, onComplete));
Expand Down Expand Up @@ -173,7 +173,7 @@ protected void doSend(final byte[] data,
ex = e;
}

Util.notifyComplete(this, onComplete, ex);
WebsocketUtil.notifyComplete(this, onComplete, ex);
}

@Override
Expand Down
Expand Up @@ -16,7 +16,6 @@

package org.projectodd.wunderboss.web.async;

import io.undertow.util.Headers;
import org.jboss.logging.Logger;
import org.projectodd.wunderboss.WunderBoss;

Expand All @@ -25,7 +24,6 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.management.ManagementFactory;

public class ServletHttpChannel extends OutputStreamHttpChannel {

Expand All @@ -52,8 +50,7 @@ protected String getResponseCharset() {

@Override
protected void setContentLength(int length) {
this.response.setIntHeader(Headers.CONTENT_LENGTH_STRING,
length);
this.response.setIntHeader("Content-Length", length);
}

@Override
Expand Down
Expand Up @@ -18,7 +18,7 @@

import javax.websocket.MessageHandler;

public class Util {
public class WebsocketUtil {

// Overcomes the problem of Clojure's reify being incompatible with
// generics and Undertow's dependence on ParameterizedType
Expand Down
Expand Up @@ -16,7 +16,7 @@

package org.projectodd.wunderboss.web.async.websocket;

import org.projectodd.wunderboss.web.async.Util;
import org.projectodd.wunderboss.web.async.WebsocketUtil;

import javax.websocket.CloseReason;
import javax.websocket.Endpoint;
Expand Down Expand Up @@ -115,7 +115,7 @@ public void onResult(SendResult sendResult) {
} else if (message instanceof byte[]) {
this.session.getAsyncRemote().sendBinary(ByteBuffer.wrap((byte[])message), handler);
} else {
throw Util.wrongMessageType(message.getClass());
throw WebsocketUtil.wrongMessageType(message.getClass());
}


Expand Down

0 comments on commit e895a4a

Please sign in to comment.