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)...

WebAppContext.setSystemClasses<http://download.eclipse.org/jetty/stable-8/apidocs/org/eclipse/jetty/webapp/WebAppContext.html#setSystemClasses(java.lang.String[])>(new
String[] { "java.", "javax." });
WebAppContext.setServerClasses<http://download.eclipse.org/jetty/stable-8/apidocs/org/eclipse/jetty/webapp/WebAppContext.html#setServerClasses(java.lang.String[])>(new
String[] { "-org.eclipse.jetty" });

*Technique #2*: make the classloader used for the WebAppContext what you
want.

Use 
WebAppContext.setClassloader(myclassloader)<http://download.eclipse.org/jetty/stable-8/apidocs/org/eclipse/jetty/webapp/WebAppContext.html#setClassLoader(java.lang.ClassLoader)>
;

*Technique #3*: adjust the parent loader priority.

Use 
WebAppContext.setParentLoaderPriority(true)<http://download.eclipse.org/jetty/stable-8/apidocs/org/eclipse/jetty/webapp/WebAppContext.html#setParentLoaderPriority(boolean)>;
// default is false

--
Joakim Erdfelt <[email protected]>
webtide.com <http://www.webtide.com/>
Developer advice, services and support
from the Jetty & CometD experts
eclipse.org/jetty - cometd.org


On Mon, Feb 4, 2013 at 11:16 PM, Nikem <[email protected]> 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
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to