mturk       2003/06/09 12:46:06

  Modified:    jk/native2/server/aolserver jk_logger_ns.c jk_ns.h
                        jk_service_ns.c nsjk2.c
  Log:
  The latest patches from AOL guys.
  
  Revision  Changes    Path
  1.2       +3 -3      
jakarta-tomcat-connectors/jk/native2/server/aolserver/jk_logger_ns.c
  
  Index: jk_logger_ns.c
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native2/server/aolserver/jk_logger_ns.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jk_logger_ns.c    5 May 2003 06:37:20 -0000       1.1
  +++ jk_logger_ns.c    9 Jun 2003 19:46:05 -0000       1.2
  @@ -128,11 +128,11 @@
       }
       
       if( level == JK_LOG_DEBUG_LEVEL ) {
  -        Ns_Log (Debug, buf3);
  +        Ns_Log (Debug, "nsjk2: %s", buf3);
       } else if( level == JK_LOG_INFO_LEVEL ) {
  -        Ns_Log (Notice, buf3);
  +        Ns_Log (Notice, "nsjk2: %s", buf3);
       } else {
  -        Ns_Log (Error, buf3);
  +        Ns_Log (Error, "nsjk2: %s", buf3);
       }
   
       return JK_OK;
  
  
  
  1.2       +0 -0      jakarta-tomcat-connectors/jk/native2/server/aolserver/jk_ns.h
  
  Index: jk_ns.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/aolserver/jk_ns.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  
  
  
  1.2       +10 -5     
jakarta-tomcat-connectors/jk/native2/server/aolserver/jk_service_ns.c
  
  Index: jk_service_ns.c
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native2/server/aolserver/jk_service_ns.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jk_service_ns.c   5 May 2003 06:37:20 -0000       1.1
  +++ jk_service_ns.c   9 Jun 2003 19:46:06 -0000       1.2
  @@ -313,12 +313,14 @@
       s->remote_user  = NULL_FOR_EMPTY(Ns_ConnAuthUser (conn));
       s->auth_type    = (s->remote_user==NULL? NULL : "Basic");
   
  -    s->protocol = Ns_ConnDriverName (conn);
  +    /* conn->request->line has HTTP request line */
  +    if (conn->request!=NULL && conn->request->line!=NULL)
  +        s->protocol = strrchr (conn->request->line, ' ');
   
  -    if (s->protocol==NULL || strcmp(s->protocol, "nssock")==0)
  -        s->protocol = "HTTP";
  +    if (s->protocol != NULL)
  +        s->protocol++;
       else
  -        s->protocol = "HTTPS";
  +        s->protocol = "HTTP/1.0";
   
       s->remote_host  = s->remote_addr = NULL_FOR_EMPTY(Ns_ConnPeer (conn));
   
  @@ -417,7 +419,10 @@
   
       if (workerEnv->ssl_enable || workerEnv->envvars_in_use) {
           if (workerEnv->ssl_enable) {
  -         if (s->protocol!=NULL && strcmp(s->protocol, 
workerEnv->https_indicator)==0)
  +
  +         name = Ns_ConnDriverName (conn);
  +
  +         if (name!=NULL && strcmp(name, "nsssl")==0)
                s->is_ssl = JK_TRUE;
            else 
                s->is_ssl = JK_FALSE;
  
  
  
  1.2       +172 -250  jakarta-tomcat-connectors/jk/native2/server/aolserver/nsjk2.c
  
  Index: nsjk2.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/aolserver/nsjk2.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- nsjk2.c   5 May 2003 06:37:20 -0000       1.1
  +++ nsjk2.c   9 Jun 2003 19:46:06 -0000       1.2
  @@ -64,9 +64,12 @@
   
   #include "ns.h"
   #include "jk_ns.h"
  -#include "jni_nstcl.h"
   #include <jni.h>
   
  +#define LOG_ERROR(msg) Ns_Log(Error,"nsjk2: %s:%d:$s",__FILE__,__LINE__,msg)
  +#define LOG_ERROR2(msg1,msg2) Ns_Log(Error,"nsjk2: 
%s:%d:$s:%s",__FILE__,__LINE__,msg1,msg2)
  +
  +/* Context allows request handler extract worker and vhost for the URI quickly */
   typedef struct {
       char* serverName;
       jk_uriEnv_t* uriEnv;
  @@ -78,6 +81,7 @@
   #endif
   
   
  +/* Standard AOLserver module global */
   int Ns_ModuleVersion = 1;
   
   /* Globals 
  @@ -90,31 +94,9 @@
    */
   static jk_workerEnv_t *workerEnv = NULL; /* JK2 environment */
   static JavaVM* jvmGlobal = NULL; /* JVM instance */
  -static Ns_Thread initThread = 0; /* thread which initialized JVM */
   static Ns_Tls jkTls; /* TLS destructor detaches request thread from JVM */
   static unsigned jkInitCount =0; /* number of running virtual servers using this 
module */
   
  -/* argument to pass into JK2 init. thread */
  -struct init_thread_arg {
  -    /* Tomcat home */
  -    char* server_root;
  -
  -    /* current working directory - temporary storage */
  -    char cwd_buf[PATH_MAX];
  -
  -    /* synchronization for init phase */
  -    Ns_Mutex init_lock;
  -    Ns_Cond init_cond;
  -    int     init_flag;
  -    int     init_rc;
  -
  -    /* synchronization for shutdown phase */
  -    Ns_Mutex shut_lock;
  -    Ns_Cond shut_cond;
  -    int     shut_flag;
  -} initThreadArg;
  -
  -
   /** Basic initialization for jk2.
    */
   static int jk2_create_workerEnv(apr_pool_t *p, char* serverRoot) {
  @@ -124,7 +106,7 @@
       jk_bean_t *jkb;
       
       if (jk2_pool_apr_create( NULL, &globalPool, NULL, p) != JK_OK) {
  -        Ns_Log (Error, "jk2_create_workerEnv: Cannot create apr pool");
  +        LOG_ERROR("Cannot create apr pool");
        return JK_ERR;
       }
   
  @@ -133,7 +115,7 @@
       */
       env=jk2_env_getEnv( NULL, globalPool );
       if (env == NULL) {
  -        Ns_Log (Error, "jk2_create_workerEnv: Cannot get environment");
  +        LOG_ERROR("jk2_create_workerEnv: Cannot get environment");
        return JK_ERR;
       }
           
  @@ -141,29 +123,16 @@
       /* Init the environment. */
       
       /* Create the logger */
  -#ifdef NO_NS_LOGGER
  -    jkb=env->createBean2( env, env->globalPool, "logger.file", "");
  -    if (jkb == NULL) {
  -        Ns_Log (Error, "jk2_create_workerEnv: Cannot create logger bean");
  -     return JK_ERR;
  -    }
  -
  -    env->alias( env, "logger.file:", "logger");
  -    env->alias( env, "logger.file:", "logger:");
  -    l = jkb->object;
  -#else
       env->registerFactory( env, "logger.ns",  jk2_logger_ns_factory );
   
       jkb=env->createBean2( env, env->globalPool, "logger.ns", "");
       if (jkb == NULL) {
  -        Ns_Log (Error, "jk2_create_workerEnv: Cannot create logger bean (with 
factory)");
  +        LOG_ERROR("Cannot create logger bean (with factory)");
        return JK_ERR;
       }
   
       env->alias( env, "logger.ns:", "logger");
       l = jkb->object;
  -#endif
  -    
       env->l=l;
       
   #ifdef WIN32
  @@ -180,7 +149,7 @@
       /* Create the workerEnv */
       jkb=env->createBean2( env, env->globalPool,"workerEnv", "");
       if (jkb == NULL) {
  -        Ns_Log (Error, "jk2_create_workerEnv: Cannot create worker environment 
bean");
  +        LOG_ERROR("Cannot create worker environment bean");
        return JK_ERR;
       }
   
  @@ -212,17 +181,10 @@
    */
   void jk2_shutdown_system (void* data)
   {
  -    void* thread_rc;
  +    if (--jkInitCount == 0) {
   
  -    if (--jkInitCount==0 && initThread!=0) {
  -
  -        Ns_MutexLock (&initThreadArg.shut_lock);
  -     initThreadArg.shut_flag=1;
  -     Ns_CondSignal (&initThreadArg.shut_cond);
  -     Ns_MutexUnlock (&initThreadArg.shut_lock);
  -
  -     Ns_ThreadJoin (&initThread, &thread_rc);
  -     initThread = 0;
  +     apr_pool_terminate ();
  +     apr_terminate ();
       }
   }    
   
  @@ -240,7 +202,7 @@
        workerEnv->close(env, workerEnv);
        */
   
  -     if( workerEnv->vm != NULL  && ! workerEnv->vm->mbean->disabled )
  +     if( workerEnv->vm != NULL  && !workerEnv->vm->mbean->disabled)
            workerEnv->vm->destroy( env, workerEnv->vm );
   
           workerEnv = NULL;
  @@ -249,24 +211,6 @@
   }
   
   
  -/** Initialize jk, using workers2.properties. 
  -*/
  -static int jk2_init(jk_env_t *env, apr_pool_t *pconf,
  -                  jk_workerEnv_t *workerEnv)
  -{
  -    if (workerEnv->init(env, workerEnv ) != JK_OK) {
  -        Ns_Log (Error, "jk2_init: Cannot initialize worker environment");
  -     return JK_ERR;
  -    }
  -
  -    workerEnv->server_name   = Ns_InfoServerVersion ();
  -    apr_pool_cleanup_register(pconf, NULL, jk2_shutdown, apr_pool_cleanup_null);
  -
  -    return JK_OK;
  -}
  -
  -
  -
   /* ========================================================================= */
   /* The JK module handlers                                                    */
   /* ========================================================================= */
  @@ -311,21 +255,21 @@
       if( worker==NULL && workerName!=NULL ) {
           worker=env->getByName( env, workerName);
           env->l->jkLog(env, env->l, JK_LOG_INFO, 
  -                      "nsjk2.handler() finding worker for %#lx %#lx %s\n",
  +                      "finding worker for %#lx %#lx %s\n",
                         worker, uriEnv, workerName);
           uriEnv->worker=worker;
       }
   
       if(worker==NULL || worker->mbean==NULL || worker->mbean->localName==NULL ) {
           env->l->jkLog(env, env->l, JK_LOG_ERROR, 
  -                      "nsjk2.handle() No worker for %s\n", conn->request->url); 
  +                      "No worker for %s\n", conn->request->url); 
           workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );
           return NS_FILTER_RETURN;
       }
   
       if( uriEnv->mbean->debug > 0 )
           env->l->jkLog(env, env->l, JK_LOG_DEBUG, 
  -                      "nsjk2.handler() serving %s with %#lx %#lx %s\n",
  +                      "serving %s with %#lx %#lx %s\n",
                         uriEnv->mbean->localName, worker, worker->mbean, 
worker->mbean->localName );
   
       /* Get a pool for the request */
  @@ -333,8 +277,7 @@
       if( rPool == NULL ) {
           rPool=worker->mbean->pool->create( env, worker->mbean->pool, HUGE_POOL_SIZE 
);
           if( uriEnv->mbean->debug > 0 )
  -            env->l->jkLog(env, env->l, JK_LOG_DEBUG,
  -                          "nsjk2.handler(): new rpool %#lx\n", rPool );
  +            env->l->jkLog(env, env->l, JK_LOG_DEBUG, "new rpool %#lx\n", rPool );
       }
       
       s=(jk_ws_service_t *)rPool->calloc( env, rPool, sizeof( jk_ws_service_t ));
  @@ -364,8 +307,7 @@
           return NS_OK;
       }
   
  -    env->l->jkLog(env, env->l, JK_LOG_ERROR,
  -                  "nsjk2.handler() Error connecting to tomcat %d\n", rc);
  +    env->l->jkLog(env, env->l, JK_LOG_ERROR, "Error connecting to tomcat %d\n", rc);
       workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );
       Ns_ConnReturnInternalError (conn);
       return NS_FILTER_RETURN;
  @@ -388,213 +330,193 @@
   }
   
   
  -/* APR, JNI and JK2 initialization. Call this from a thread separate from AOLserver 
main thread
  - * because of the Java garbage collection using signals that AOLserver tends to 
override
  +/** Register a URI pattern with AOLserver
    */
  -static int InitJK2Module (char* server_root) {
  -    jk_env_t *env;
  -    apr_status_t aprrc;
  -    char errbuf[512];
  -    apr_pool_t *jk_globalPool = NULL;
  -        
  -    if ((aprrc=apr_initialize()) != APR_SUCCESS) {
  -        Ns_Log (Error, "InitJK2Module: Cannot initialize APR:%s", apr_strerror 
(aprrc, errbuf, sizeof(errbuf)));
  -     return JK_ERR;
  -    }
  -
  -    if ((aprrc=apr_pool_create(&jk_globalPool, NULL)) != APR_SUCCESS) {
  -        Ns_Log (Error, "InitJK2Module: Cannot create global APR pool:%s", 
apr_strerror (aprrc, errbuf, sizeof(errbuf)));
  -     return JK_ERR;
  -    }
  -
  -    if (workerEnv==NULL && jk2_create_workerEnv(jk_globalPool, server_root)==JK_ERR)
  -        return JK_ERR;
  -
  -    env=workerEnv->globalEnv;
  -    env->setAprPool(env, jk_globalPool);
  -    
  -    if (jk2_init( env, jk_globalPool, workerEnv) != JK_OK) {
  -        Ns_Log (Error, "InitJK2Module: Cannot initialize module");
  -     return JK_ERR;
  -    }
  -
  -    workerEnv->was_initialized = JK_TRUE; 
  -    
  -    if ((aprrc=apr_pool_userdata_set( "INITOK", "InitJK2Module", NULL, 
jk_globalPool )) != APR_SUCCESS) {
  -        Ns_Log (Error, "InitJK2Module: Cannot set APR pool user data:%s", 
apr_strerror (aprrc, errbuf, sizeof(errbuf)));
  -     return JK_ERR;
  -    }
  +static void registerURI (jk_env_t* env, jk_uriEnv_t* uriEnv, char* vserver, char* 
serverName) {
  +    uriContext* ctx;
  +    char* uriname;
   
  -    if (workerEnv->parentInit( env, workerEnv) != JK_OK) {
  -        Ns_Log (Error, "InitJK2Module: Cannot initialize global environment");
  -     return JK_ERR;
  -    }
  +    if (uriEnv==NULL || uriEnv->mbean==NULL)
  +     return;
   
  -    /* Obtain TLS slot - it's destructor will detach threads from JVM */
  -    jvmGlobal = workerEnv->vm->jvm;
  -    Ns_TlsAlloc (&jkTls, jkTlsDtor);
  +    uriname=uriEnv->mbean->getAttribute (env, uriEnv->mbean, "uri");
  +    if (uriname==NULL || strcmp(uriname, "/")==0)
  +        return;
   
  -    /* TLS slot for non-server Tcl interpreter */
  -    Ns_TlsAlloc (&tclInterpData, tclInterpDataDtor);
  -    
  -    return JK_OK;
  -}
  -
  -/*
  - * Must initialize JVM in a separate thread due to signal conflicts (failed to 
confirm existance, but strongly
  - * recommended by nsjava code).
  - * AOLserver main thread allegedly masks signals that JVM uses for garbage 
collection
  - *
  - */
  -static void InitJK2ModuleThread (void* arg) {
  -   int rc;
  +    ctx = Ns_Malloc (sizeof (uriContext));
  +    if (ctx == NULL)
  +        return;
   
  -   Ns_ThreadSetName ("nsjk2");
  +    ctx->serverName = serverName;
  +    ctx->uriEnv = uriEnv;
   
  -   rc =InitJK2Module (initThreadArg.server_root);
  +    if (uriEnv->mbean->debug > 0)
  +        env->l->jkLog (env, env->l, JK_LOG_DEBUG, "registering URI %s", uriname);
   
  -   /* prepare to report initialization results */
  -   Ns_MutexLock(&initThreadArg.init_lock);
  -   initThreadArg.init_rc = rc;
  -   initThreadArg.init_flag =1;
  -   Ns_CondSignal (&initThreadArg.init_cond);
  -   Ns_MutexUnlock(&initThreadArg.init_lock);
  -   
  -   if (rc==JK_OK) {
  -       /* wait for shutdown */
  -
  -       Ns_MutexLock (&initThreadArg.shut_lock);
  -
  -       while (!initThreadArg.shut_flag)
  -        Ns_CondWait (&initThreadArg.shut_cond, &initThreadArg.shut_lock);
  -    
  -       Ns_MutexUnlock (&initThreadArg.shut_lock);
  -
  -       apr_pool_terminate ();
  -       apr_terminate ();
  -   }
  -     
  -   Ns_ThreadExit ((void*)rc);
  +    Ns_RegisterRequest(vserver, "GET", uriname, jk2_handler, NULL, ctx, 0);
  +    Ns_RegisterRequest(vserver, "HEAD", uriname, jk2_handler, NULL, ctx, 0);
  +    Ns_RegisterRequest(vserver, "POST", uriname, jk2_handler, NULL, ctx, 0);
   }
   
   
  -/**
  - * Initialize JK2 in a new thread
  +/** Standard AOLserver callback.
  + * Initialize jk2, unless already done in another server. Register URI mappping for 
Tomcat
  + * If multiple virtual servers use this module, calls to Ns_ModuleInit will be made 
serially
  + * in order of appearance of those servers in nsd.tcl
    */
  -int CreateJK2InitThread (char* module)
  +int Ns_ModuleInit(char *server, char *module)
   {
  -    int init_rc;
  -    char* modPath;
  -    char cwdBuf[PATH_MAX];
  -
  -    modPath = Ns_ConfigGetPath (NULL, module, NULL);
  -    initThreadArg.server_root = (modPath? Ns_ConfigGetValue (modPath, "serverRoot") 
: NULL);
  -
  -    if (initThreadArg.server_root == NULL)
  -       initThreadArg.server_root  = getenv ("TOMCAT_HOME");
  -
  -    if (initThreadArg.server_root == NULL)
  -        initThreadArg.server_root = getcwd (initThreadArg.cwd_buf, sizeof(cwdBuf));
  -
  -    initThreadArg.init_flag = 0;
  -    Ns_MutexInit (&initThreadArg.init_lock);
  -    Ns_CondInit (&initThreadArg.init_cond);
  -
  -    initThreadArg.shut_flag = 0;
  -    Ns_MutexInit (&initThreadArg.shut_lock);
  -    Ns_CondInit (&initThreadArg.shut_cond);
  -
  -    /* create thread with 2M of stack */
  -    Ns_ThreadCreate (InitJK2ModuleThread, &initThreadArg, 2*1024*1024, &initThread);
  -    if (initThread == 0) {
  -        Ns_Log (Error, "Ns_ModuleInit: Cannot create JK2 initialization thread");
  -     return NS_ERROR;
  -    }
  +    jk_env_t *env;
       
  -    /* wait till JVM is initialized */
  -    Ns_MutexLock (&initThreadArg.init_lock);
  -
  -    while (initThreadArg.init_flag==0)
  -        Ns_CondWait (&initThreadArg.init_cond, &initThreadArg.init_lock);
  +    /* configuration-related */
  +    char* serverName=NULL;
  +    char* confPath;
  +    static char cwdBuf[PATH_MAX];
  +    static char* serverRoot = NULL;
   
  -    init_rc=initThreadArg.init_rc;
  +    /* APR-related */
  +    apr_status_t aprrc;
  +    char errbuf[512];
  +    apr_pool_t *jk_globalPool = NULL;
   
  -    Ns_MutexUnlock (&initThreadArg.init_lock);
  +    /* URI registration */
  +    char *hosts[2] = {"*", NULL};
  +    jk_map_t *vhosts;
  +    int i, j, k, l, cnt1, cnt2;
  +    jk_map_t *uriMap, *webapps, *uriMaps[3];
  +    jk_uriEnv_t *uriEnv, *hostEnv, *appEnv;
  +
  +
  +    if (jkInitCount++ == 0) {
  +
  +        /* Get Tomcat installation root - this value is same for all virtual 
servers*/
  +        if (serverRoot == NULL) {
  +            confPath = Ns_ConfigGetPath (NULL, module, NULL);
  +            serverRoot = (confPath? Ns_ConfigGetValue (confPath, "serverRoot") : 
NULL);
  +        }
  +
  +        /* not configured in nsd.tcl? try env. variable */
  +        if (serverRoot == NULL) {
  +            serverRoot = getenv ("TOMCAT_HOME");
  +        }
  +
  +        /* not in env. variables? get it from CWD */
  +        if (serverRoot == NULL) {
  +            serverRoot = getcwd (cwdBuf, sizeof(cwdBuf));
  +        }
  +
  +     /* Initialize APR */
  +     if ((aprrc=apr_initialize()) != APR_SUCCESS) {
  +         LOG_ERROR2 ("Cannot initialize APR", apr_strerror (aprrc, errbuf, 
sizeof(errbuf)));
  +         return NS_ERROR;
  +     }
   
  -    return init_rc;
  -}
  +     if ((aprrc=apr_pool_create(&jk_globalPool, NULL)) != APR_SUCCESS) {
  +         LOG_ERROR2 ("Cannot create global APR pool", apr_strerror (aprrc, errbuf, 
sizeof(errbuf)));
  +         return NS_ERROR;
  +     }
   
  +     /* Initialize JNI */
  +     if (workerEnv==NULL && jk2_create_workerEnv(jk_globalPool, 
serverRoot)==JK_ERR) {
  +         return NS_ERROR;
  +     }
   
  -/** Create context to pass to URI handler
  - */
  -uriContext* createURIContext (jk_uriEnv_t* uriEnv, char* serverName) {
  -    uriContext* ctx = Ns_Malloc (sizeof (uriContext));
  +     env=workerEnv->globalEnv;
  +     env->setAprPool(env, jk_globalPool);
   
  -    if (ctx) {
  -        ctx->serverName = serverName;
  -     ctx->uriEnv = uriEnv;
  -    }
  +     /* Initialize JK2 */
  +     if (workerEnv->init(env, workerEnv ) != JK_OK) {
  +         LOG_ERROR("Cannot initialize worker environment");
  +         return NS_ERROR;
  +     }
   
  -    return ctx;
  -}
  +     workerEnv->server_name = apr_pstrcat (jk_globalPool, Ns_InfoServerName(), " ", 
Ns_InfoServerVersion (), NULL);
  +     apr_pool_cleanup_register(jk_globalPool, NULL, jk2_shutdown, 
apr_pool_cleanup_null);
   
  +     workerEnv->was_initialized = JK_TRUE; 
  +    
  +     if ((aprrc=apr_pool_userdata_set( "INITOK", "Ns_ModuleInit", NULL, 
jk_globalPool )) != APR_SUCCESS) {
  +         LOG_ERROR2 ("Cannot set APR pool user data", apr_strerror (aprrc, errbuf, 
sizeof(errbuf)));
  +         return NS_ERROR;
  +     }
   
  -/** Callback to get rid of URI context in registered procs
  - */
  -static void deleteURIContext (void* context) {
  -    Ns_Free (context);
  -}
  - 
  -/** Standard AOLserver callback.
  - * Initialize jk2, unless already done in another server. Register URI mappping for 
Tomcat
  - * If multiple virtual servers use this module, calls to Ns_ModuleInit will be made 
serially
  - * in order of appearance of those servers in nsd.tcl
  - */
  -int Ns_ModuleInit(char *server, char *module)
  -{
  -    int init_rc = JK_OK;
  -    jk_map_t* uriMap;
  -    int i, urimapsz;
  -    char *uriname, *vhost;
  -    jk_env_t *env;
  -    jk_uriEnv_t* uriEnv;
  -    uriContext* ctx;
  -    char* serverName=NULL;
  -    char* confPath;
  +     if (workerEnv->parentInit( env, workerEnv) != JK_OK) {
  +         LOG_ERROR ("Cannot initialize global environment");
  +         return NS_ERROR;
  +     }
   
  -    if (jkInitCount++ == 0)
  -        init_rc = CreateJK2InitThread (module);
  +     /* Obtain TLS slot - it's destructor will detach threads from JVM */
  +     jvmGlobal = workerEnv->vm->jvm;
  +     Ns_TlsAlloc (&jkTls, jkTlsDtor);
  +
  +     Ns_Log (Notice, "nsjk2: Initialized JK2 environment");
  +
  +    } else {
  +      
  +      env = workerEnv->globalEnv;
  +    }
   
       Ns_RegisterShutdown (jk2_shutdown_system, NULL);
   
  -    if (init_rc != JK_OK) {
  -        Ns_Log (Error, "Ns_ModuleInit: Cannot initialize JK2 module");
  -     return NS_ERROR;
  -    }
  +    /* Register URI patterns from workers2.properties with AOLserver 
  +     *  
  +     * Worker environment has a list of vhosts, including "*" vhost.
  +     * Each vhost has a list of web applications (contexts) associated with it.
  +     * Each webapp has a list of exact, prefix, suffix and regexp URI patterns.
  +     *
  +     * Will register URIs that are either in vhost "*", or one with name matching
  +     * this AOLserver virtual server. Will ignore regexp patterns. Will register 
  +     * exact webapp URIs (context root) as JK2 somehow doesn't include them in URI
  +     * maps, even if specified in workers2.properties.
  +     *
  +     */
   
  -    /* get Tomcat serverName override if specified */
  +    /* virtual server name override if specified */
       confPath = Ns_ConfigGetPath (server, module, NULL);
       if (confPath != NULL)
           serverName = Ns_ConfigGetValue (confPath, "serverName");
  +
  +    if (serverName == NULL)
  +        serverName = server;
       
  -    /* create context with proper worker info for each URI registered in 
workers2.properties */
  -    uriMap = workerEnv->uriMap->maps;
  -    env=workerEnv->globalEnv;
  -
  -    for (i=0, urimapsz=uriMap->size(env, uriMap); i<urimapsz; i++) {
  -        uriEnv = uriMap->valueAt(env, uriMap, i);
  -        uriname=uriEnv->mbean->getAttribute(env, uriEnv->mbean, "uri");
  -        vhost=uriEnv->mbean->getAttribute(env, uriEnv->mbean, "host");
  -
  -     if (uriname!=NULL && strcmp(uriname, "/") && /* i.e., not global root */ 
  -         (vhost==NULL || strcmp(vhost, "*")==0 || strcmp(vhost, server)==0)) /* 
match virtual server */ {
  -
  -         ctx = createURIContext (uriEnv, serverName);
  -         Ns_RegisterRequest(server, "GET", uriname, jk2_handler, NULL, ctx, 0);
  -         Ns_RegisterRequest(server, "HEAD", uriname, jk2_handler, NULL, ctx, 0);
  -         Ns_RegisterRequest(server, "POST", uriname, jk2_handler, NULL, ctx, 0);
  +    vhosts=workerEnv->uriMap->vhosts;
  +    hosts[1]= serverName;
  +
  +    for (i=0; i<sizeof(hosts)/sizeof(*hosts); i++) {
  +        hostEnv=vhosts->get (env, vhosts, hosts[i]);
  +
  +     if (hostEnv==NULL || hostEnv->webapps==NULL)
  +         continue;
  +
  +     webapps=hostEnv->webapps;
  +     cnt1=webapps->size(env, webapps);
  +
  +     for (j=0; j<cnt1; j++) {
  +         appEnv = webapps->valueAt (env, webapps, j);
  +         if (appEnv == NULL)
  +             continue;
  +
  +         /* register webapp root - registerURI checks if it is "/" */
  +         registerURI (env, appEnv, server, serverName);
  +         
  +         uriMaps[0] = appEnv->exactMatch;
  +         uriMaps[1] = appEnv->prefixMatch;
  +         uriMaps[2] = appEnv->suffixMatch;
  +
  +         for (k=0; k<sizeof(uriMaps)/sizeof(*uriMaps); k++) {
  +             if (uriMaps[k] == NULL)
  +                 continue;
  +
  +             cnt2 = uriMaps[k]->size (env, uriMaps[k]);
  +             
  +             for (l=0; l<cnt2; l++) {
  +                  registerURI (env, uriMaps[k]->valueAt (env, uriMaps[k], l), 
server, serverName);
  +             }
  +         }
        }
       }
  +
  +    Ns_Log (Notice, "nsjk2: Initialized on %s", server);
   
       return NS_OK;
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to