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

Didn't help I needed to change system and server classes

The demo also use jetty-http-client along with the websocket-client and to make it work
I added "org.eclipse.jetty.io." and "org.eclipse.jetty.util.thread." to system classes and "-org.eclipse.jetty.io." and "-org.eclipse.jetty.util.thread." to server classes. And it worked with having and not having websocket api and common jars in the war.

from my jetty.xml

<Configure id="Server" class="org.eclipse.jetty.server.Server">
....

<Call name="setAttribute">
        <Arg>org.eclipse.jetty.webapp.systemClasses</Arg>
        <Arg>
            <Array type="java.lang.String">
              <Item>java.</Item>
              <Item>javax.</Item>
              <Item>org.xml.</Item>
              <Item>org.w3c.</Item>
              <Item>org.eclipse.jetty.continuation.</Item>
              <Item>org.eclipse.jetty.jndi.</Item>
              <Item>org.eclipse.jetty.jaas.</Item>
              <Item>org.eclipse.jetty.websocket.</Item>
              <Item>org.eclipse.jetty.websocket.WebSocketServlet</Item>
              <Item>org.eclipse.jetty.servlet.DefaultServlet</Item>

              <Item>org.eclipse.jetty.io.</Item>
              <Item>org.eclipse.jetty.util.thread.</Item>
            </Array>
        </Arg>        
    </Call>
    <Call name="setAttribute">
        <Arg>org.eclipse.jetty.webapp.serverClasses</Arg>
        <Arg>
            <Array type="java.lang.String">
              <Item>-org.eclipse.jetty.continuation.</Item>
              <Item>-org.eclipse.jetty.jndi.</Item>
              <Item>-org.eclipse.jetty.jaas.</Item>
              <Item>-org.eclipse.jetty.servlets.</Item>
              <Item>-org.eclipse.jetty.websocket.WebSocketServlet</Item>
              <Item>-org.eclipse.jetty.servlet.DefaultServlet</Item>
              <Item>-org.eclipse.jetty.servlet.listener.</Item>
              <Item>-org.eclipse.jetty.websocket.</Item>

              <Item>-org.eclipse.jetty.io.</Item>
              <Item>-org.eclipse.jetty.util.thread.</Item>


              <Item>org.eclipse.jetty.</Item>              
            </Array>
        </Arg>
    </Call>

</Configure>


--
Vlado




On Tue, Feb 26, 2013 at 5:54 PM, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:
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


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



Back to the top