You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Benoit Derouet <bd...@calendra.com> on 2001/04/05 17:46:56 UTC
[PATCH Suggestion] Tomcat 3.2.x adapter in load balancing using URL
Hi,
The load balancer worker fail to handle load balancing if the
application use sticky session managed by URL.
The load balancer look for a the parameter "jsessionid" in the URL, and
then can find the worker to contact for the request.
First, the JK_PATH_SESSION_IDENTIFIER in jk_global.h is set to
";jsessionid", but this should be set to "jsessionid".
In jk_lb_worker.c, the function "get_path_param" should return a the
parameter with a given name, but this function look in the URI
(jk_ws_service_t->req_uri), and not in the parameters
(jk_ws_service_t->query_string).
So this function always return NULL.
So here is a suggestion for the "get_path_param" function :
static char *get_path_param(jk_ws_service_t *s,
const char *name,
jk_logger_t *l)
{
char *id_start = NULL;
if(s->query_string) {
for(id_start = strstr(s->query_string, name) ;
id_start ;
id_start = strstr(id_start + 1, name)) {
if('=' == id_start[strlen(name)]) {
/*
* Session path-cookie was found, get
it's value
*/
id_start += (1 + strlen(name));
if(strlen(id_start)) {
char *id_end;
id_start =
jk_pool_strdup(s->pool, id_start);
/*
* The query string is not part
of req_uri, however
* to be on the safe side lets
remove the trailing query
* string if appended...
*/
if(id_end = strchr(id_start,
'?')) {
*id_end = '\0';
}
return id_start;
}
}
}
}
return NULL;
}
and the JK_PATH_SESSION_IDENTIFIER must be change to "jsessionid" in
jk_global.h.
With those two changes, it works fine. I test it on Windows 2000 with
iis and Tomcat 3.2.1.
regards
Benoit.