[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [jetty-users] Jetty 8 WebSockets and class loading issue
|
Is this an embedded use of jetty?
If so, you'll want to configure the classloading in WebAppContext.
Pick one of the techniques below (shouldn't need to use multiple techniques)
Technique #1: systemClasses and serverClasses entries.
How it works ...
systemClasses
System classes are classes that cannot be replaced by
the web application, and they are *always* loaded via
system classloader.
serverClasses
Server classes are classes that are hidden from being
loaded by the web application using system classloader,
so if web application needs to load any of such classes,
it has to include them in its distribution.
So to essentially have nothing be filtered/excluded at the webapp, and have everything from the server be viewable from the webapp. (quite against the servlet spec btw)...
Technique #2: make the classloader used for the WebAppContext what you want.
Technique #3: adjust the parent loader priority.
--
Developer advice, services and support
from the Jetty & CometD experts
On Mon, Feb 4, 2013 at 11:16 PM, Nikem
<gnikem@xxxxxxxxx> wrote:
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
_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/jetty-users