Mark, Here after doing all the tests I found the exact error. It was not what i am thinking all through. Sorry for the confusion I created and I apologize for overenthusiasm in opening the bug.
The problem was with order of proxypass directives i was confiuring Here I gice both configurations for anybody who might face similar probs: The one which doesn't work : JkMount /jkweb/* localtomcat JkUnMount /jkweb/project/content/* localtomcat JkUnMount /jkweb/angle/content/* localtomcat JkUnMount /jkweb/index.jsp localtomcat JkUnMount /jkweb/ localtomcat ProxyRequests Off ProxyPreserveHost On ProxyPass /jkweb ! ProxyPass /jkweb/ ! ProxyPass /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ ProxyPassReverse /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ ProxyPass / http://localhost:8080/jkweb/ ProxyPassReverse / http://localhost:8080/jkweb And Here us the one which works irrespective of which hosts we use : JkMount /jkweb/* localtomcat JkUnMount /jkweb/project/content/* localtomcat JkUnMount /jkweb/angle/content/* localtomcat JkUnMount /jkweb/index.jsp localtomcat JkUnMount /jkweb/ localtomcat ProxyRequests Off ProxyPreserveHost On ProxyPass /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ ProxyPassReverse /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ ProxyPass /jkweb ! ProxyPass /jkweb/ ! ProxyPass / http://localhost:8080/jkweb/ ProxyPassReverse / http://localhost:8080/jkweb The difference is the place where I place ProxyPass /jkweb ! ProxyPass /jkweb/ ! Directives. Thanks, Shailesh. On Sat, Mar 1, 2014 at 6:33 PM, J Java <jforjava1...@gmail.com> wrote: > When I revert to earlier config with localhost it starts working. > > > On Sat, Mar 1, 2014 at 6:18 PM, J Java <jforjava1...@gmail.com> wrote: > >> JkMount /jkweb/* localtomcat >> JkUnMount /jkweb/project/content/* localtomcat >> JkUnMount /jkweb/angle/content/* localtomcat >> JkUnMount /jkweb/index.jsp localtomcat >> JkUnMount /jkweb/ localtomcat >> >> ProxyRequests Off >> ProxyPreserveHost On >> >> ProxyPass /jkweb ! >> ProxyPass /jkweb/ ! >> ProxyPass /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ >> ProxyPassReverse /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ >> ProxyPass / http://localhost:8080/jkweb/ >> ProxyPassReverse / http://localhost:8080/jkweb >> >> Updated configuration..above is the complete configuration for my >> virtualhost. >> >> >> >> On Sat, Mar 1, 2014 at 6:14 PM, J Java <jforjava1...@gmail.com> wrote: >> >>> Mark, >>> >>> following is how i have configured reverse proxy : >>> >>> ProxyRequests Off >>> ProxyPreserveHost On >>> >>> ProxyPass /jkweb ! >>> ProxyPass /jkweb/ ! >>> ProxyPass /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ >>> ProxyPassReverse /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ >>> ProxyPass / http://localhost:8080/jkweb/ >>> ProxyPassReverse / http://localhost:8080/jkweb >>> >>> I am using Apache 2.4 which comes with mod_proxy_wstunnel module to >>> support http upgrade to Websocket. >>> >>> Also my code works fine if I configure localhost everywhere, its just when >>> I change it to use dummy host using window's hosts file and virtual host it >>> stops working. And it upgrades to WebSocket but cant send or receive >>> messages after that. Please find in detail configuration and code in my >>> first post. Any pointers how to go about it will really help. Or let me >>> know the right place to open bug for this. >>> >>> Thanks, >>> >>> Shailesh. >>> >>> >>> >>> On Sat, Mar 1, 2014 at 4:10 PM, Mark Thomas <ma...@apache.org> wrote: >>> >>>> On 1 March 2014 10:02:48 GMT, J Java <jforjava1...@gmail.com> wrote: >>>> >I tried debuggin tomcat sources. And compared the difference I am >>>> >getting >>>> >between normal tomcat websocket examples and my code. Only difference i >>>> >could found was tomcat example uses Abstract Protocol class to fire the >>>> >register session event and mine uses AjpProcessor(because I am using >>>> >tomcat >>>> >behind apache). but in AJpProcessor class it gets stuck and never calls >>>> >registersession for Websocket. >>>> > >>>> >I know above information might be utterlyt useless but this waht i have >>>> >understood ..guys I need this to be resolved ASAP. it was working fine >>>> >when >>>> >i was using localhost everywhere. since I changed it to dummy host it >>>> >has >>>> >stopped working >>>> >>>> How is your reverse proxy configured? mod_jk doesn't support HTTP >>>> upgrade and the last time I looked mod_proxy support for WebSocket wasn't >>>> fit for purpose. >>>> >>>> Mark >>>> >>>> >>>> >On Sat, Mar 1, 2014 at 2:31 PM, J Java <jforjava1...@gmail.com> wrote: >>>> > >>>> >> >>>> >> 127.0.0.1 - - [01/Mar/2014:14:20:12 +0530] "GET >>>> >> /jkweb/js/angle/addAngle.js?_=1393663610411 HTTP/1.1" 200 4278 >>>> >> 127.0.0.1 - - [01/Mar/2014:14:20:41 +0530] "GET >>>> >> /jkweb/angle/validateDuplicateAngleName.action?angleName=angle7 >>>> >HTTP/1.1" >>>> >> 200 - >>>> >> phasingapp.com - - [01/Mar/2014:14:21:15 +0530] "GET >>>> >> >>>> >>>> >/jkweb/websocket/fileuploadtracker?uniqueTocken=9c9e740c-7171-4c33-bc92-e0a46cb2d2b5 >>>> >> HTTP/1.1" 101 - >>>> >> >>>> >> Above is the relevant log section of apache : could it be the cause >>>> >that >>>> >> websocket request is coming from phasingapp.com and others from >>>> >127.0.01 >>>> >> >>>> >> >>>> >> On Sat, Mar 1, 2014 at 1:53 PM, J Java <jforjava1...@gmail.com> >>>> >wrote: >>>> >> >>>> >>> I had recently implemented websocket on tomcat 7.0.50. my tomcat >>>> >runs >>>> >>> behind apache 2.4. I use Strtus 2 and Spring Security. It has >>>> >stopped >>>> >>> working. >>>> >>> >>>> >>> Problem : Websocket connection is opened successfully. Javascript >>>> >event >>>> >>> handler get fires successfully. Apache logs show that request was >>>> >accepted >>>> >>> as an protocol upgrade request with 101 code Tomcat access logs also >>>> >show >>>> >>> the same code 101 for protocol upgrade >>>> >>> >>>> >>> However on server side onOpen message is not fired. I tried sending >>>> >the >>>> >>> message as soon as connection is opened in javascript's event >>>> >handler.. >>>> >>> There is no error in javascript but Server side endPoint's onmessage >>>> >is >>>> >>> never called just like onOpen is never called. >>>> >>> >>>> >>> Here are the changes I made after which it has stopped working: >>>> >>> >>>> >>> Windows Host file : I use dummy host name through Windows host >>>> >file: >>>> >>> 127.0.0.1 phasingapp.com >>>> >>> 127.0.0.1 pricer.com >>>> >>> >>>> >>> URL of wesocket : >>>> >>> >>>> >>> old : ws://localhost:86/websocket/filuploadtrackerendpoint >>>> >>> new : ws://phasingapp.com:86/websocket/filuploadtrackerendpoint >>>> >>> >>>> >>> Added virtual host config for apache : >>>> >>> >>>> >>> <Location /jkweb/websocket/> >>>> >>> Require host phasingapp.com granted >>>> >>> </Location> >>>> >>> >>>> >>> JkMount /jkweb/* localtomcat >>>> >>> JkUnMount /jkweb/project/content/* localtomcat >>>> >>> JkUnMount /jkweb/angle/content/* localtomcat >>>> >>> JkUnMount /jkweb/index.jsp localtomcat >>>> >>> JkUnMount /jkweb/ localtomcat >>>> >>> >>>> >>> ProxyRequests Off >>>> >>> ProxyPreserveHost On >>>> >>> >>>> >>> ProxyPass /jkweb ! >>>> >>> ProxyPass /jkweb/ ! >>>> >>> ProxyPass /jkweb/websocket/ ws://localhost:8080/jkweb/websocket/ >>>> >>> ProxyPassReverse /jkweb/websocket/ >>>> >ws://localhost:8080/jkweb/websocket/ >>>> >>> ProxyPass / http://localhost:8080/jkweb/ >>>> >>> ProxyPassReverse / http://localhost:8080/jkweb/ >>>> >>> >>>> >>> Struts 2 : >>>> >>> >>>> >>> changed url pattern for Struts 2 filter from ".action to " /* ". >>>> >Also added exclusion filters >>>> >>> to strtus2 for webscoket urls : >>>> >>> >>>> >>> <constant name="struts.action.excludePattern" >>>> >value=".*websocket/.*"/> >>>> >>> >>>> >>> Everything seems to be working fine as i am gettting no error >>>> >anywhere in >>>> >>> apache,tomcat,spring security and Struts2 logs. >>>> >>> >>>> >>> However on server side no handlers are called? >>>> >>> >>>> >>> Earlier I had faced similar problem but it was because I had put >>>> >>> websocket-api jar in my WEB-INF/lib which was preventing websocket >>>> >>> connection from getting opened. No connection is opened but no >>>> >handler is >>>> >>> called after that and after some time connection is closed obviously >>>> >>> because of timout I suppose. >>>> >>> >>>> >>> Here is my ServerEndPoint class : >>>> >>> >>>> >>> package com.jkweb.websocket; >>>> >>> >>>> >>> import java.io.IOException; >>>> >>> import java.util.HashMap; >>>> >>> import java.util.List; >>>> >>> import java.util.Map; >>>> >>> >>>> >>> import javax.websocket.EndpointConfig; >>>> >>> import javax.websocket.OnMessage; >>>> >>> import javax.websocket.OnOpen; >>>> >>> import javax.websocket.Session; >>>> >>> import javax.websocket.server.PathParam; >>>> >>> import javax.websocket.server.ServerEndpoint; >>>> >>> >>>> >>> import org.slf4j.Logger; >>>> >>> import org.slf4j.LoggerFactory; >>>> >>> >>>> >>> @ServerEndpoint(value="/websocket/fileuploadtracker") >>>> >>> public class FileUploadTrackerEndPoint{ >>>> >>> private static final Logger logger = LoggerFactory >>>> >>> .getLogger(FileUploadTrackerEndPoint.class); >>>> >>> private static HashMap<String,Session> socketConnectionMap = >>>> >new HashMap<String,Session>(); >>>> >>> >>>> >>> @OnOpen >>>> >>> public void open(Session session) { >>>> >>> Map<String,List<String>> paramMap = >>>> >session.getRequestParameterMap(); >>>> >>> List<String> uniqueTockenValues = >>>> >paramMap.get("uniqueTocken"); >>>> >>> if(uniqueTockenValues != null && uniqueTockenValues.size() > >>>> >0){ >>>> >>> >>>> >socketConnectionMap.put(uniqueTockenValues.get(0),session); >>>> >>> } >>>> >>> } >>>> >>> @OnMessage >>>> >>> public void onMessage(Session session, String msg) { >>>> >>> try { >>>> >>> session.getBasicRemote().sendText(msg); >>>> >>> } catch (IOException e) { >>>> >>> logger.error(e.getMessage()); >>>> >>> } >>>> >>> } >>>> >>> >>>> >>> public static void sendMessage(String uniqueTocken,String msg){ >>>> >>> try { >>>> >>> Session wsSession = >>>> >socketConnectionMap.get(uniqueTocken); >>>> >>> wsSession.getBasicRemote().sendText(msg); >>>> >>> } catch (IOException e) { >>>> >>> logger.error(e.getMessage()); >>>> >>> } >>>> >>> } >>>> >>> } >>>> >>> >>>> >>> and my javascript code : >>>> >>> >>>> >>> createFileUploadWebSocket : function(){ >>>> >>> var that = this; >>>> >>> var uniqueTocken = $("#uniqueTocken").val(), >>>> >>> wsurl = >>>> >"ws:// >>>> phasingapp.com:86/jkweb/websocket/fileuploadtracker?uniqueTocken= >>>> "+uniqueTocken, >>>> >>> ws; >>>> >>> ws = new WebSocket(wsurl); >>>> >>> ws.onopen = function() >>>> >>> { >>>> >>> alert("opened..") //I get this aler sothis is >>>> >called >>>> >>> ws.send("test");//however this has not effect ...no >>>> >error but server end point is not called >>>> >>> }; >>>> >>> ws.onmessage = function (evt) >>>> >>> { >>>> >>> message = evt.data; >>>> >>> if(message == "Done."){ >>>> >>> alert("closing.."); >>>> >>> ws.close(); >>>> >>> >>>> >$('#progressbar').progressbar('option','value',100); >>>> >>> } >>>> >>> var currentVal = >>>> >$('#progressbar').progressbar('option','value'); >>>> >>> >>>> >$('#progressbar').progressbar('option','value',currentVal <= 80 >>>> >?currentVal+1 : currentVal); >>>> >>> }; >>>> >>> ws.onclose = function(evt) >>>> >>> { >>>> >>> // websocket is closed. >>>> >>> alert("Connection is closed..."+evt.code + >>>> >":"+evt.reason ); >>>> >>> }; >>>> >>> >>>> >>> ws.onerror = function(evt){ >>>> >>> alert("Connection is closed..."+evt.code + >>>> >":"+evt.reason ); >>>> >>> }; >>>> >>> >>>> >>> }, >>>> >>> >>>> >>> Thanks, >>>> >>> Shailesh. >>>> >>> >>>> >> >>>> >> >>>> >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>>> For additional commands, e-mail: users-h...@tomcat.apache.org >>>> >>>> >>> >> >