I figured this out after reading this:
http://stackoverflow.com/questions/19054286/classnotfoundexception-org-eclipse-jetty-util-component-abstractlifecycle-runni

In my WebSocketServer main() function, I needed to add this line:

context.setServerClasses(new String[] {"org.eclipse.jetty.util.*"});

This forces the loading of all util classes from the server, not from the
webapp.


On Mon, Feb 17, 2014 at 12:50 PM, Jason Fugate <[email protected]> wrote:

> My game is a full on server/client app, so I'm not sure how exactly to
> remove jetty from the WEB-INF/lib without breaking the game.  The
> index.html file for the game loads resources then opens a websocket to the
> jetty server from which it was just served.  The server code in the app has
> a websocket listener that processes all the communication from the client
> as players play the game. In production, the app is served from a jetty
> service that simply loads up the game's .war file and goes.
>
> In testing, I just want to simulate the server by loading the war file
> directory programatically.  The test server looks like this:
>
> import org.eclipse.jetty.server.Server;
> import org.eclipse.jetty.webapp.WebAppContext;
>
> public final class WebSocketServer {
>
> public static void main (String[] args) throws Exception {
>  Server server = new Server(8081);
>  WebAppContext context = new WebAppContext();
>  context.setDescriptor("/tacan-app/war/WEB-INF/web.xml");
> context.setResourceBase("/tacan-app/war");
>  context.setContextPath("/game");
> context.setParentLoaderPriority(true);
>  server.setHandler(context);
> server.start();
>  server.join();
> }
> }
>
>
> On Mon, Feb 17, 2014 at 9:49 AM, Joakim Erdfelt <[email protected]>wrote:
>
>> You have the websocket classes both in the server side and also in the
>> webapp side.
>>
>> To fix, remove the websocket classes from your webapp's WEB-INF/lib/
>>  tree.
>>
>> --
>> Joakim Erdfelt <[email protected]>
>> webtide.com <http://www.webtide.com/> - intalio.com/jetty
>> Expert advice, services and support from from the Jetty & CometD experts
>> eclipse.org/jetty - cometd.org
>>
>>
>> On Mon, Feb 17, 2014 at 9:34 AM, Jason Fugate <[email protected]>wrote:
>>
>>>
>>> I'm updating my WebSocket game from Jetty 8 to Jetty 9.  I have a little
>>> embedded test server that I use to launch the game for debugging, which
>>> works in Jetty 8.  After updating the .jar files to 9 and refactoring my
>>> WebSocket classes to the new paradigm in 9, I can launch the embedded test
>>> server, but when I connect to it in the browser, I get the below error and
>>> stack trace.
>>>
>>> Manually breakpointing the callstack shows that it is failing on loading
>>> org.eclipse.jetty.util.component.Container, which is strange because it
>>> seemingly creates such Containers with ease in the launch of the server.
>>>
>>> This link is a screenshot of my build path in Eclipse:
>>> http://imgur.com/d7XOgsM  The app builds with GWT 2.6.  Any ideas on
>>> what I'm missing here?
>>>
>>> java.lang.IncompatibleClassChangeError: Implementing class
>>> at java.lang.ClassLoader.defineClass1(Native Method)
>>> at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
>>>  at
>>> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
>>> at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
>>>  at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
>>>  at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
>>> at java.security.AccessController.doPrivileged(Native Method)
>>>  at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
>>> at
>>> org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:421)
>>>  at
>>> org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
>>> at java.lang.ClassLoader.defineClass1(Native Method)
>>>  at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
>>> at
>>> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
>>>  at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
>>> at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
>>>  at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
>>>  at java.security.AccessController.doPrivileged(Native Method)
>>> at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
>>>  at
>>> org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:421)
>>> at
>>> org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
>>>  at java.lang.Class.forName0(Native Method)
>>> at java.lang.Class.forName(Class.java:270)
>>> at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:363)
>>>  at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
>>> at
>>> org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.load(WebSocketServletFactory.java:56)
>>>  at
>>> org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.create(WebSocketServletFactory.java:42)
>>> at
>>> org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketServlet.java:128)
>>>  at javax.servlet.GenericServlet.init(GenericServlet.java:244)
>>> at
>>> org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:534)
>>>  at
>>> org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:417)
>>> at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:659)
>>>  at
>>> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
>>> at
>>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
>>>  at
>>> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
>>> at
>>> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
>>>  at
>>> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
>>> at
>>> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
>>>  at
>>> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
>>> at
>>> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
>>>  at
>>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
>>> at
>>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
>>>  at org.eclipse.jetty.server.Server.handle(Server.java:366)
>>> at
>>> org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
>>>  at
>>> org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
>>> at
>>> org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
>>>  at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
>>> at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
>>>  at
>>> org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
>>> at
>>> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
>>>  at
>>> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
>>> at
>>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
>>>  at
>>> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
>>> at java.lang.Thread.run(Thread.java:744)
>>>
>>> _______________________________________________
>>> 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
>>
>>
>
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to