Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-users] Jetty 8 WebSockets and class loading issue

Hi all!

I am trying to develop a web application, that uses embedded jetty and
websockets. For bootstrapping jetty, I have compiled one uber jar,
jetty.jar, that contains jetty-deploy.jar with all its dependencies
and my launcher class. And then I have the usual exploded webapp,
which I pass to context.setResourceBase(base);

Now I have a problem where to put jetty-websocket.jar. If I include it
to my uber jetty.jar, then application crashes on startup:

13087 WARN  o.e.j.u.component.AbstractLifeCycle - FAILED MyWebSocket:
java.lang.NoClassDefFoundError:
org/eclipse/jetty/websocket/WebSocketServlet
java.lang.NoClassDefFoundError: org/eclipse/jetty/websocket/WebSocketServlet
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.6.0_37]
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) ~[na:1.6.0_37]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615) ~[na:1.6.0_37]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
~[na:1.6.0_37]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) ~[na:1.6.0_37]
	at java.net.URLClassLoader.access$000(URLClassLoader.java:58) ~[na:1.6.0_37]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:197) ~[na:1.6.0_37]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_37]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190) ~[na:1.6.0_37]
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:421)
~[jetty.jar:na]
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
~[jetty.jar:na]
	at org.eclipse.jetty.util.Loader.loadClass(Loader.java:101) ~[jetty.jar:na]
	at org.eclipse.jetty.util.Loader.loadClass(Loader.java:80) ~[jetty.jar:na]
	at org.eclipse.jetty.servlet.Holder.doStart(Holder.java:97) ~[jetty.jar:na]
	at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:298)
~[jetty.jar:na]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
[jetty.jar:na]
	at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:747)
[jetty.jar:na]
	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
[jetty.jar:na]
	at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
[jetty.jar:na]
	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
[jetty.jar:na]
	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
[jetty.jar:na]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
[jetty.jar:na]
	at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
[jetty.jar:na]
	at org.eclipse.jetty.server.Server.doStart(Server.java:277) [jetty.jar:na]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
[jetty.jar:na]
	at Launcher.startServer(Launcher.java:53) [T/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_37]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
~[na:1.6.0_37]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
~[na:1.6.0_37]
	at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_37]
	at Main.main(Main.java:52) [portal-SNAPSHOT.war:na]
Caused by: java.lang.ClassNotFoundException:
org.eclipse.jetty.websocket.WebSocketServlet
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202) ~[na:1.6.0_37]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_37]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190) ~[na:1.6.0_37]
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:421)
~[jetty.jar:na]
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
~[jetty.jar:na]
	... 31 common frames omitted

If I put  jetty-websocket.jar into WEB-INF/lib folder, I get an exception:

29854 WARN  o.e.jetty.servlet.ServletHandler - Error for /pws
java.lang.NoClassDefFoundError: org/eclipse/jetty/io/EndPoint
	at org.eclipse.jetty.websocket.WebSocketServlet.init(WebSocketServlet.java:68)
~[jetty-websocket-8.1.8.v20121106.jar:8.1.8.v20121106]
	at javax.servlet.GenericServlet.init(GenericServlet.java:244) ~[jetty.jar:na]
	at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:519)
~[jetty.jar:na]
	at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:402)
~[jetty.jar:na]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:642)
~[jetty.jar:na]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
[jetty.jar:na]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
[jetty.jar:na]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
[jetty.jar:na]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
[jetty.jar:na]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
[jetty.jar:na]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
[jetty.jar:na]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
[jetty.jar:na]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
[jetty.jar:na]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
[jetty.jar:na]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
[jetty.jar:na]
	at org.eclipse.jetty.server.Server.handle(Server.java:365) [jetty.jar:na]
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
[jetty.jar:na]
	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
[jetty.jar:na]
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
[jetty.jar:na]
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
[jetty.jar:na]
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
[jetty.jar:na]
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
[jetty.jar:na]
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
[jetty.jar:na]
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
[jetty.jar:na]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
[jetty.jar:na]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
[jetty.jar:na]
	at java.lang.Thread.run(Thread.java:680) [na:1.6.0_37]
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.io.EndPoint
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202) ~[na:1.6.0_37]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_37]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190) ~[na:1.6.0_37]
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:421)
~[jetty.jar:na]
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
~[jetty.jar:na]
	... 27 common frames omitted

There is not jetty-io in WEB-INF/lib, but it is included in uber jar.
I suspect the notion of WebAppContext's system and server classes is
at play here, but cannot understand it fully.

Should I include jetty-websockets.jar and all it's dependencies into
WEB-INF/lib and not rely on them being provided by server, my uber
jar?

Hope to hear from you soon...
Nikita Salnikov-Tarnovski


Back to the top