Guice dependency injection for Jetty (v9.3.11) WebSockets
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.websocket.server.WebSocketHandler;
public class WebsocketEchoServer {
private Server server;
public WebsocketEchoServer(int port) {
server = new Server(port);
server.setHandler(
new GuiceWebSocketHandler(EchoServerSocket.class, new EchoServerModule())
);
}
public void run() throws Exception {
server.start();
server.join();
}
}
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import org.eclipse.jetty.websocket.server.WebSocketHandler;
import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
import static com.google.common.base.Preconditions.checkNotNull;
public class GuiceWebSocketHandler extends WebSocketHandler implements WebSocketCreator {
private final Class<?> socketClass;
private final Injector injector;
public GuiceWebSocketHandler(Class<?> socketClass, Module... modules) {
this.socketClass = checkNotNull(socketClass);
this.injector = Guice.createInjector(modules);
}
@Override
public void configure(WebSocketServletFactory factory) {
factory.setCreator(this);
}
@Override
public Object createWebSocket(ServletUpgradeRequest req, ServletUpgradeResponse resp) {
return injector.getInstance(socketClass);
}
}