Hello, I am trying to follow few Jetty 9 websocket tutorials ( like https://webtide.com/jetty-9-updated-websocket-api/ ) and run embedded Jetty with a custom WebSocketListener.
1) https://github.com/afarber/jetty-newbie/blob/master/EmbeddedWebsocket/src/main/java/de/afarber/MyListener.java - package de.afarber; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.WebSocketListener; /** * Example EchoSocket using Listener. */ public class MyListener implements WebSocketListener { private Session mSession; @Override public void onWebSocketBinary(byte[] payload, int offset, int len) { /* only interested in text messages */ } @Override public void onWebSocketClose(int statusCode, String reason) { mSession = null; } @Override public void onWebSocketConnect(Session session) { mSession = session; } @Override public void onWebSocketError(Throwable cause) { cause.printStackTrace(System.err); } @Override public void onWebSocketText(String message) { if (mSession != null && mSession.isOpen()) { System.out.printf("Echoing back message [%s]%n",message); mSession.getRemote().sendString(message,null); } } } 2) https://github.com/afarber/jetty-newbie/blob/master/EmbeddedWebsocket/src/main/java/de/afarber/MyServlet.java - package de.afarber; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.websocket.servlet.WebSocketServlet; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; public class MyServlet extends WebSocketServlet { public static void main(String[] args) throws Exception { Server server = new Server(8080); ServletContextHandler context = new ServletContextHandler(); context.addServlet(MyServlet.class, "/"); server.setHandler(context); server.start(); server.join(); } @Override public void configure(WebSocketServletFactory factory) { factory.register(MyListener.class); } } 3) I don't use Jetty Maven Plugin in my https://github.com/afarber/jetty-newbie/blob/master/EmbeddedWebsocket/pom.xml - because as I have understood, the Jetty Maven Plugin starts Jetty (with "mvn jetty:run") which then scans the webapps dir for war-files - while I want to start "embedded Jetty", which only serves Websocket requests (and add JDBC connection to my PostgreSQL database later): <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"> <modelVersion>4.0.0</modelVersion> <groupId>de.afarber</groupId> <artifactId>embedded-websocket</artifactId> <version>0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>Embedded Websocket</name> <properties> <jettyVersion>9.3.9.v20160517</jettyVersion> </properties> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>${jettyVersion}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>${jettyVersion}</version> </dependency> <dependency> <groupId>org.eclipse.jetty.websocket</groupId> <artifactId>websocket-api</artifactId> <version>${jettyVersion}</version> </dependency> <dependency> <groupId>org.eclipse.jetty.websocket</groupId> <artifactId>websocket-servlet</artifactId> <version>${jettyVersion}</version> </dependency> </dependencies> </project> Also I think that at my production server (with CentOS 7 Linux) I shouldn't use Maven to start the production Jetty... So I have opened my project with the above 3 files in NetBeans and run it. Then I have copied the parameters it uses to start the "embedded Jetty" to command line of my Macbook: # /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java -cp /Users/afarber/src/jetty-newbie/EmbeddedWebsocket/target/classes:/Users/afarber/.m2/repository/org/eclipse/jetty/jetty-server/9.3.9.v20160517/jetty-server-9.3.9.v20160517.jar:/Users/afarber/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar:/Users/afarber/.m2/repository/org/eclipse/jetty/jetty-http/9.3.9.v20160517/jetty-http-9.3.9.v20160517.jar:/Users/afarber/.m2/repository/org/eclipse/jetty/jetty-util/9.3.9.v20160517/jetty-util-9.3.9.v20160517.jar:/Users/afarber/.m2/repository/org/eclipse/jetty/jetty-io/9.3.9.v20160517/jetty-io-9.3.9.v20160517.jar:/Users/afarber/.m2/repository/org/eclipse/jetty/jetty-servlet/9.3.9.v20160517/jetty-servlet-9.3.9.v20160517.jar:/Users/afarber/.m2/repository/org/eclipse/jetty/jetty-security/9.3.9.v20160517/jetty-security-9.3.9.v20160517.jar:/Users/afarber/.m2/repository/org/eclipse/jetty/websocket/websocket-api/9.3.9.v20160517/websocket-api-9.3.9.v20160517.jar:/Users/afarber/.m2/repository/org/eclipse/jetty/websocket/websocket-servlet/9.3.9.v20160517/websocket-servlet-9.3.9.v20160517.jar de.afarber.MyServlet 2016-05-27 12:32:40.742:INFO::main: Logging initialized @191ms 2016-05-27 12:32:40.831:INFO:oejs.Server:main: jetty-9.3.9.v20160517 2016-05-27 12:32:40.867:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@2a33fae0{/,null,AVAILABLE} 2016-05-27 12:32:40.908:INFO:oejs.AbstractConnector:main: Started ServerConnector@277c0f21{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 2016-05-27 12:32:40.909:INFO:oejs.Server:main: Started @361ms So far so good, but when I try to open http://localhost:8080 I get the exception: 2016-05-27 12:33:32.632:WARN:/:qtp1880587981-12: unavailable java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketServerFactory at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.load(WebSocketServletFactory.java:66) at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.create(WebSocketServletFactory.java:44) at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketServlet.java:130) at javax.servlet.GenericServlet.init(GenericServlet.java:244) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:640) at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:496) at org.eclipse.jetty.servlet.ServletHolder.ensureInstance(ServletHolder.java:788) at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:773) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:578) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1174) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1106) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) at org.eclipse.jetty.server.Server.handle(Server.java:524) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) at java.lang.Thread.run(Thread.java:745) 2016-05-27 12:33:32.633:WARN:oejs.ServletHandler:qtp1880587981-12: javax.servlet.ServletException: java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketServerFactory at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketServlet.java:142) at javax.servlet.GenericServlet.init(GenericServlet.java:244) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:640) at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:496) at org.eclipse.jetty.servlet.ServletHolder.ensureInstance(ServletHolder.java:788) at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:773) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:578) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1174) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1106) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) at org.eclipse.jetty.server.Server.handle(Server.java:524) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketServerFactory at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.load(WebSocketServletFactory.java:66) at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.create(WebSocketServletFactory.java:44) at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketServlet.java:130) at javax.servlet.GenericServlet.init(GenericServlet.java:244) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:640) at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:496) at org.eclipse.jetty.servlet.ServletHolder.ensureInstance(ServletHolder.java:788) at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:773) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:578) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1174) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1106) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) at org.eclipse.jetty.server.Server.handle(Server.java:524) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) at java.lang.Thread.run(Thread.java:745) Am I maybe missing --modules=websocket argument? I have tried to add it to the above command line, but java does not know it. Also I have tried to use start.jar: # java -jar /Users/afarber/src/jetty.project//jetty-distribution/target/distribution/start.jar --module=websocket /Users/afarber/src/jetty-newbie/EmbeddedWebsocket/target/embedded-websocket-0.1-SNAPSHOT.jar Unrecognized argument: "/Users/afarber/src/jetty-newbie/EmbeddedWebsocket/target/embedded-websocket-0.1-SNAPSHOT.jar" in <command-line> Please help Alex
_______________________________________________ jetty-users mailing list [email protected] To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/jetty-users
