diff --git a/examples/embedded/pom.xml b/examples/embedded/pom.xml index f1f5bee89f8..eddccebcfe0 100644 --- a/examples/embedded/pom.xml +++ b/examples/embedded/pom.xml @@ -42,6 +42,11 @@ jetty-jmx ${project.version} + + org.eclipse.jetty.websocket + javax-websocket-server-impl + ${project.version} + org.eclipse.jetty.websocket websocket-server diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/WebSocketJsrServer.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/WebSocketJsrServer.java new file mode 100644 index 00000000000..31587028708 --- /dev/null +++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/WebSocketJsrServer.java @@ -0,0 +1,73 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.embedded; + +import javax.websocket.OnMessage; +import javax.websocket.Session; +import javax.websocket.server.ServerEndpoint; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.websocket.jsr356.server.ServerContainer; +import org.eclipse.jetty.websocket.jsr356.server.WebSocketConfiguration; + +/** + * Example of setting up a javax.websocket server with Jetty embedded + */ +public class WebSocketJsrServer +{ + /** + * A server socket endpoint + */ + @ServerEndpoint(value = "/echo") + public static class EchoJsrSocket + { + @OnMessage + public void onMessage(Session session, String message) + { + session.getAsyncRemote().sendText(message); + } + } + + public static void main(String[] args) throws Exception + { + Server server = new Server(8080); + + ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); + context.setContextPath("/"); + server.setHandler(context); + + // Add a servlet to your context. + // It is required that you provide at least 1 servlet. + // Recommended that this servlet mere provide a + // "This is a websocket only server" style response + context.addServlet(new ServletHolder(new DumpServlet()),"/*"); + + // Enable javax.websocket configuration for the context + ServerContainer wsContainer = WebSocketConfiguration.configureContext(context); + + // Add your websockets to the container + wsContainer.addEndpoint(EchoJsrSocket.class); + + server.start(); + context.dumpStdErr(); + server.join(); + } +} diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/WebSocketServer.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/WebSocketServer.java new file mode 100644 index 00000000000..2c50f6b5e52 --- /dev/null +++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/WebSocketServer.java @@ -0,0 +1,79 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.embedded; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.websocket.api.Session; +import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; +import org.eclipse.jetty.websocket.api.annotations.WebSocket; +import org.eclipse.jetty.websocket.servlet.WebSocketServlet; +import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; + +/** + * Example of setting up a Jetty WebSocket server + *

+ * Note: this uses the Jetty WebSocket API, not the javax.websocket API. + */ +public class WebSocketServer +{ + /** + * Example of a Jetty API WebSocket Echo Socket + */ + @WebSocket + public static class EchoSocket + { + @OnWebSocketMessage + public void onMessage(Session session, String message) + { + session.getRemote().sendStringByFuture(message); + } + } + + /** + * Servlet layer + */ + @SuppressWarnings("serial") + public static class EchoServlet extends WebSocketServlet + { + @Override + public void configure(WebSocketServletFactory factory) + { + // Register the echo websocket with the basic WebSocketCreator + factory.register(EchoSocket.class); + } + } + + public static void main(String[] args) throws Exception + { + Server server = new Server(8080); + + ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); + context.setContextPath("/"); + server.setHandler(context); + + // Add the echo socket servlet to the /echo path map + context.addServlet(new ServletHolder(EchoServlet.class),"/echo"); + + server.start(); + context.dumpStdErr(); + server.join(); + } +}