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
>>>>
>>>>
>>>
>>
>

Reply via email to