Re: Issue running Websockets JSR356 with Tomcat 7.0.50 Embedded
2014-02-25 19:14 GMT+04:00 Jacopo Cappellato : > Any hints? I would really appreciate if someone could provide some pointers > (e.g. classes involved etc) about the implementation of the mechanism used to > discover and deploy endpoints; I will then try to study the code in order to > figure out why it doesn't work when I set jarScanner.setScanClassPath(false) The discovery is done with an SCI (javax.servlet.ServletContainerInitializer), as defined in tomcat7-websocket.jar/META-INF/services. The class name is "org.apache.tomcat.websocket.server.WsSci". It seems that you prevented its discovery by skipping that jar in your JarScanner. You can also bootstrap web sockets by defining a listener in web.xml (org.apache.tomcat.websocket.server.WsContextListener). That listener just starts and shuts down the websocket engine, it does not scan for endpoints. http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/websocket/server/WsContextListener.html Best regards, Konstantin Kolinko - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Issue running Websockets JSR356 with Tomcat 7.0.50 Embedded
On Feb 25, 2014, at 4:20 PM, Mark Thomas wrote: > On 25/02/2014 15:14, Jacopo Cappellato wrote: >> Any hints? I would really appreciate if someone could provide some >> pointers (e.g. classes involved etc) about the implementation of the >> mechanism used to discover and deploy endpoints; I will then try to >> study the code in order to figure out why it doesn't work when I set >> jarScanner.setScanClassPath(false) > > Presumably because the Endpoints you are trying to deploy are not part > of the web application (i.e. in WEB-INF/classes or WEB-INF/lib) and > loaded by the web application but are on the class path. Well, actually in my unit test (posted in this thread) I am deploying the examples application of Tomcat, and the websockets in it are under the WEB-INF folder. Jacopo > > Mark > > - > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Issue running Websockets JSR356 with Tomcat 7.0.50 Embedded
On 25/02/2014 15:14, Jacopo Cappellato wrote: > Any hints? I would really appreciate if someone could provide some > pointers (e.g. classes involved etc) about the implementation of the > mechanism used to discover and deploy endpoints; I will then try to > study the code in order to figure out why it doesn't work when I set > jarScanner.setScanClassPath(false) Presumably because the Endpoints you are trying to deploy are not part of the web application (i.e. in WEB-INF/classes or WEB-INF/lib) and loaded by the web application but are on the class path. Mark - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Issue running Websockets JSR356 with Tomcat 7.0.50 Embedded
Any hints? I would really appreciate if someone could provide some pointers (e.g. classes involved etc) about the implementation of the mechanism used to discover and deploy endpoints; I will then try to study the code in order to figure out why it doesn't work when I set jarScanner.setScanClassPath(false) Thanks, Jacopo On Feb 14, 2014, at 7:58 PM, Jacopo Cappellato wrote: > Here is the client code that I use to recreate the "problem": > >public static void main(String[] args) throws Exception { > >String currentDir = new File(".").getCanonicalPath(); >String tomcatDir = currentDir + File.separatorChar + "tomcat"; >String webRoot = currentDir + File.separatorChar + "examples"; > >Tomcat tomcat = new Tomcat(); >tomcat.setBaseDir(tomcatDir); >tomcat.setPort(8080); > >tomcat.addWebapp("/examples", webRoot); > >// this code gets the JarScanner and sets scanClassPath to false: >// with this setting the websockets are not deployed >Container[] containers = > tomcat.getService().getContainer().findChildren(); >StandardHost host = (StandardHost)containers[0]; >containers = host.findChildren(); >StandardContext ctx = (StandardContext)containers[0]; >StandardJarScanner jarScanner = > (StandardJarScanner)ctx.getJarScanner(); >jarScanner.setScanClassPath(false); // if this is set to true the > websockets are deployed successfully > >tomcat.start(); > >while (true) { >Thread.sleep(9); >} >} > > I run this code from a folder containing the "examples" webapp and the Tomcat > jars. > > Is there a way to deploy successfully the websockets with > setScanClassPath(false) ? > > Thanks, > > Jacopo - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Issue running Websockets JSR356 with Tomcat 7.0.50 Embedded
Here is the client code that I use to recreate the "problem": public static void main(String[] args) throws Exception { String currentDir = new File(".").getCanonicalPath(); String tomcatDir = currentDir + File.separatorChar + "tomcat"; String webRoot = currentDir + File.separatorChar + "examples"; Tomcat tomcat = new Tomcat(); tomcat.setBaseDir(tomcatDir); tomcat.setPort(8080); tomcat.addWebapp("/examples", webRoot); // this code gets the JarScanner and sets scanClassPath to false: // with this setting the websockets are not deployed Container[] containers = tomcat.getService().getContainer().findChildren(); StandardHost host = (StandardHost)containers[0]; containers = host.findChildren(); StandardContext ctx = (StandardContext)containers[0]; StandardJarScanner jarScanner = (StandardJarScanner)ctx.getJarScanner(); jarScanner.setScanClassPath(false); // if this is set to true the websockets are deployed successfully tomcat.start(); while (true) { Thread.sleep(9); } } I run this code from a folder containing the "examples" webapp and the Tomcat jars. Is there a way to deploy successfully the websockets with setScanClassPath(false) ? Thanks, Jacopo On Feb 13, 2014, at 6:47 PM, Jacopo Cappellato wrote: > Hello all, > > I did further tests and I have now implemented a test client that executes a > Tomcat embedded instance that is successfully running websockets. > The client code resembles quite closely what we are doing in OFBiz to prepare > the Tomcat instance... and I think I have found the settings that is causing > the issue in OFBiz. > When in OFBiz we create the Context objects we set in their JarScanner (we > use the StandardJarScanner): setScanClassPath(false) > > I have noticed that if in my test client I set the same the websockets are > not mounted; they only work with setScanClassPath(true). > > Since I doubt we will be able to set it to true in OFBiz, I would really > appreciate if you could provide some hints about the mechanism that Tomcat > uses to deploy websockets. > > Am I completely off track? > > Thanks, > > Jacopo > > On Jan 29, 2014, at 4:42 PM, Jacopo Cappellato > wrote: > >> Hello all, >> >> I am trying to deploy and use Websockets using the Tomcat 7.0.50 *Embedded* >> distribution [*]. >> >> Some more details on my environment: >> * I have the following jars in my classpath: >> ** tomcat-7.0.50-tomcat-embed-core.jar >> ** tomcat-7.0.50-tomcat-embed-jasper.jar >> ** tomcat-7.0.50-tomcat-embed-logging-log4j.jar >> ** tomcat-7.0.50-tomcat7-websocket.jar >> ** tomcat-7.0.50-websocket-api.jar >> ** ecj-4.2.2.jar >> ** annotations-api-3.0.jar >> ** jsp-api-2.2.jar >> ** servlet-api-3.0.jar >> * I have mounted the "examples" webapp that comes with Tomcat (Core >> distribution) using the Embedded Tomcat instance: all the examples work fine >> (including the websocket-deprecated ones) except for the Websockets JSR356 >> ones >> >> When I try to run the Websockets JSR356 examples, when I try to "Connect" >> (either using the programmatic API or the annotation API) I get the message: >> Info: WebSocket connection closed. >> Nothing appears in the console. >> >> Any hints would be greatly appreciated. Thanks in advance >> >> Jacopo >> >> [*] The reason I am using the Embedded version of Tomcat is that I am trying >> to add support for Websockets to Apache OFBiz (ofbiz.apache.org) and OFBiz >> runs Tomcat in embedded mode. >> >> >> - >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: users-h...@tomcat.apache.org >> > - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Issue running Websockets JSR356 with Tomcat 7.0.50 Embedded
Hello all, I did further tests and I have now implemented a test client that executes a Tomcat embedded instance that is successfully running websockets. The client code resembles quite closely what we are doing in OFBiz to prepare the Tomcat instance... and I think I have found the settings that is causing the issue in OFBiz. When in OFBiz we create the Context objects we set in their JarScanner (we use the StandardJarScanner): setScanClassPath(false) I have noticed that if in my test client I set the same the websockets are not mounted; they only work with setScanClassPath(true). Since I doubt we will be able to set it to true in OFBiz, I would really appreciate if you could provide some hints about the mechanism that Tomcat uses to deploy websockets. Am I completely off track? Thanks, Jacopo On Jan 29, 2014, at 4:42 PM, Jacopo Cappellato wrote: > Hello all, > > I am trying to deploy and use Websockets using the Tomcat 7.0.50 *Embedded* > distribution [*]. > > Some more details on my environment: > * I have the following jars in my classpath: > ** tomcat-7.0.50-tomcat-embed-core.jar > ** tomcat-7.0.50-tomcat-embed-jasper.jar > ** tomcat-7.0.50-tomcat-embed-logging-log4j.jar > ** tomcat-7.0.50-tomcat7-websocket.jar > ** tomcat-7.0.50-websocket-api.jar > ** ecj-4.2.2.jar > ** annotations-api-3.0.jar > ** jsp-api-2.2.jar > ** servlet-api-3.0.jar > * I have mounted the "examples" webapp that comes with Tomcat (Core > distribution) using the Embedded Tomcat instance: all the examples work fine > (including the websocket-deprecated ones) except for the Websockets JSR356 > ones > > When I try to run the Websockets JSR356 examples, when I try to "Connect" > (either using the programmatic API or the annotation API) I get the message: > Info: WebSocket connection closed. > Nothing appears in the console. > > Any hints would be greatly appreciated. Thanks in advance > > Jacopo > > [*] The reason I am using the Embedded version of Tomcat is that I am trying > to add support for Websockets to Apache OFBiz (ofbiz.apache.org) and OFBiz > runs Tomcat in embedded mode. > > > - > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Issue running Websockets JSR356 with Tomcat 7.0.50 Embedded
Thank you Mark! Please see inline: On Jan 29, 2014, at 4:50 PM, Mark Thomas wrote: > On 29/01/2014 15:42, Jacopo Cappellato wrote: >> Hello all, >> >> I am trying to deploy and use Websockets using the Tomcat 7.0.50 *Embedded* >> distribution [*]. > > Java version? 1.7.0_40 > >> Some more details on my environment: >> * I have the following jars in my classpath: >> ** tomcat-7.0.50-tomcat-embed-core.jar >> ** tomcat-7.0.50-tomcat-embed-jasper.jar >> ** tomcat-7.0.50-tomcat-embed-logging-log4j.jar >> ** tomcat-7.0.50-tomcat7-websocket.jar >> ** tomcat-7.0.50-websocket-api.jar >> ** ecj-4.2.2.jar >> ** annotations-api-3.0.jar >> ** jsp-api-2.2.jar >> ** servlet-api-3.0.jar >> * I have mounted the "examples" webapp that comes with Tomcat (Core >> distribution) using the Embedded Tomcat instance: all the examples work fine >> (including the websocket-deprecated ones) except for the Websockets JSR356 >> ones > > I think you may have duplicated some classes there. Some of those API JARs > may not be required. > >> When I try to run the Websockets JSR356 examples, when I try to "Connect" >> (either using the programmatic API or the annotation API) I get the message: >> Info: WebSocket connection closed. >> Nothing appears in the console. > > The HTTP headers send and received would help you to debug / enable us > to provide you with some pointers. The error I am getting in the browser is the following: [Error] WebSocket connection to 'ws://localhost:8080/examples/websocket/echoAnnotation' failed: Unexpected response code: 404 (echo.xhtml, line 0) It seems like the endpoint was not mounted but I amy be wrong. Thanks, Jacopo > > Mark > > > - > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: Issue running Websockets JSR356 with Tomcat 7.0.50 Embedded
On 29/01/2014 15:42, Jacopo Cappellato wrote: > Hello all, > > I am trying to deploy and use Websockets using the Tomcat 7.0.50 *Embedded* > distribution [*]. Java version? > Some more details on my environment: > * I have the following jars in my classpath: > ** tomcat-7.0.50-tomcat-embed-core.jar > ** tomcat-7.0.50-tomcat-embed-jasper.jar > ** tomcat-7.0.50-tomcat-embed-logging-log4j.jar > ** tomcat-7.0.50-tomcat7-websocket.jar > ** tomcat-7.0.50-websocket-api.jar > ** ecj-4.2.2.jar > ** annotations-api-3.0.jar > ** jsp-api-2.2.jar > ** servlet-api-3.0.jar > * I have mounted the "examples" webapp that comes with Tomcat (Core > distribution) using the Embedded Tomcat instance: all the examples work fine > (including the websocket-deprecated ones) except for the Websockets JSR356 > ones I think you may have duplicated some classes there. Some of those API JARs may not be required. > When I try to run the Websockets JSR356 examples, when I try to "Connect" > (either using the programmatic API or the annotation API) I get the message: > Info: WebSocket connection closed. > Nothing appears in the console. The HTTP headers send and received would help you to debug / enable us to provide you with some pointers. Mark - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org