Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-dev] Problem running war using websocket client in Jetty 9.0.0-SNAPSHOT

We'll have to tweak the WebAppClassloader it seems.
For now, get rid of these two files from your war and try again.

WEB-INF/lib/websocket-api-9.0.0-SNAPSHOT.jar
WEB-INF/lib/websocket-common-9.0.0-SNAPSHOT.jar

--
Joakim Erdfelt <joakim@xxxxxxxxxxx>
Developer advice, services and support
from the Jetty & CometD experts


On Tue, Feb 26, 2013 at 8:52 AM, Vladimir Tsanev <tsachev@xxxxxxxxx> wrote:
Hi,
I am trying to run a web app that uses web socket client library to
connect to other servers and also deploys a web socket servlet to
serve request from clients. (Actually it is the cometd demo which does
oort server to server communication through websockets a little
modified )

The server contains
lib/websocket/websocket-api-9.0.0-SNAPSHOT.jar
ib/websocket/websocket-common-9.0.0-SNAPSHOT.jar
lib/websocket/websocket-server-9.0.0-SNAPSHOT.jar
lib/websocket/websocket-servlet-9.0.0-SNAPSHOT.jar

so no web socket client jars on the server.

in WEB-INF/lib there are

WEB-INF/lib/bayeux-api-3.0.0-SNAPSHOT.jar
WEB-INF/lib/cometd-java-annotations-3.0.0-SNAPSHOT.jar
WEB-INF/lib/cometd-java-client-3.0.0-SNAPSHOT.jar
WEB-INF/lib/cometd-java-common-3.0.0-SNAPSHOT.jar
WEB-INF/lib/cometd-java-oort-3.0.0-SNAPSHOT.jar
WEB-INF/lib/cometd-java-server-3.0.0-SNAPSHOT.jar
WEB-INF/lib/cometd-jetty-websocket-client-3.0.0-SNAPSHOT.jar
WEB-INF/lib/javax.inject-1.jar
WEB-INF/lib/jetty-client-9.0.0-SNAPSHOT.jar
WEB-INF/lib/jetty-continuation-9.0.0-SNAPSHOT.jar
WEB-INF/lib/jetty-http-9.0.0-SNAPSHOT.jar
WEB-INF/lib/jetty-io-9.0.0-SNAPSHOT.jar
WEB-INF/lib/jetty-jmx-9.0.0-SNAPSHOT.jar
WEB-INF/lib/jetty-servlets-9.0.0-SNAPSHOT.jar
WEB-INF/lib/jetty-util-9.0.0-SNAPSHOT.jar
WEB-INF/lib/jetty-util-ajax-9.0.0-SNAPSHOT.jar
WEB-INF/lib/jsr250-api-1.0.jar
WEB-INF/lib/log4j-1.2.17.jar
WEB-INF/lib/slf4j-api-1.7.2.jar
WEB-INF/lib/slf4j-log4j12-1.7.2.jar
WEB-INF/lib/websocket-api-9.0.0-SNAPSHOT.jar
WEB-INF/lib/websocket-client-9.0.0-SNAPSHOT.jar
WEB-INF/lib/websocket-common-9.0.0-SNAPSHOT.jar


If I run it I get LinkageError

java.lang.LinkageError: loader constraint violation: when resolving
method "org.eclipse.jetty.websocket.common.extensions.WebSocketExtensionFactory.<init>(Lorg/eclipse/jetty/websocket/api/WebSocketPolicy;Lorg/eclipse/jetty/io/ByteBufferPool;)V"
the class loader (instance of
org/eclipse/jetty/webapp/WebAppClassLoader) of the current class,
org/eclipse/jetty/websocket/client/WebSocketClient, and the class
loader (instance of org/eclipse/jetty/start/Classpath$Loader) for
resolved class,
org/eclipse/jetty/websocket/common/extensions/WebSocketExtensionFactory,
have different Class objects for the type
on.extensions.WebSocketExtensionFactory.<init>(Lorg/eclipse/jetty/websocket/api/WebSocketPolicy;Lorg/eclipse/jetty/io/ByteBufferPool;)V
used in the signature
at org.eclipse.jetty.websocket.client.WebSocketClient.<init>(WebSocketClient.java:85)
at org.eclipse.jetty.websocket.client.WebSocketClient.<init>(WebSocketClient.java:78)
at org.cometd.oort.Oort.doStart(Oort.java:146)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.cometd.oort.OortConfigServlet.init(OortConfigServlet.java:94)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:517)
at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:327)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:743)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:279)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1314)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:722)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:274)
at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:193)
at org.eclipse.jetty.util.component.ContainerLifeCycle.updateBeans(ContainerLifeCycle.java:712)
at org.eclipse.jetty.server.handler.HandlerCollection.setHandlers(HandlerCollection.java:89)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.setHandlers(ContextHandlerCollection.java:165)
at org.eclipse.jetty.server.handler.HandlerCollection.addHandler(HandlerCollection.java:155)
at org.eclipse.jetty.deploy.bindings.StandardDeployer.processBinding(StandardDeployer.java:41)
at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:495)
at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:175)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:600)
at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:145)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:557)
at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:232)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:108)
at org.eclipse.jetty.server.Server.start(Server.java:346)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:90)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:58)
at org.eclipse.jetty.server.Server.doStart(Server.java:294)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1233)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1160)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.jetty.start.Main.invokeMain(Main.java:453)
at org.eclipse.jetty.start.Main.start(Main.java:595)
at org.eclipse.jetty.start.Main.main(Main.java:96)


If I add the websocket-client-9.0.0-SNAPSHOT.jar in server's
lib/websocket folder and it runs ok.

The problem seems to be that websocket common depends on server
classes from jetty-io and jetty-util. But I am not a classloader
master so don't know for sure yet.

Before websocket was a self contained jar and I think this was not an
issue. I do like the idea websocket library to have server and client
jar separated, because this is a step in the right direction (It would
be great for example if there is a jetty-http-server jar which does
not forces me to use servlet-api one day, so I can build non-servlet
web based apps, like when using netty).

Probably changing somehow systemClasses and serverClasses of the
WebAppClassloader can help, I tried it but did not have any luck.

--
Vlado
_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/jetty-dev


Back to the top