You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by sh...@locus.apache.org on 2000/05/01 14:30:33 UTC

cvs commit: jakarta-tomcat/src/native/jk jk_jni_worker.c jk_map.c jk_util.c jk_util.h

shachor     00/05/01 05:30:33

  Modified:    src/native/jk jk_jni_worker.c jk_map.c jk_util.c jk_util.h
  Log:
  First version of the Tomcat/Jakarta NT service
  
  Revision  Changes    Path
  1.2       +26 -39    jakarta-tomcat/src/native/jk/jk_jni_worker.c
  
  Index: jk_jni_worker.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/native/jk/jk_jni_worker.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jk_jni_worker.c	2000/04/17 09:47:22	1.1
  +++ jk_jni_worker.c	2000/05/01 12:30:32	1.2
  @@ -57,7 +57,7 @@
    * Description: In process JNI worker                                      *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
    * Based on:                                                               *
  - * Version:     $Revision: 1.1 $                                               *
  + * Version:     $Revision: 1.2 $                                               *
    ***************************************************************************/
   
   #ifndef WIN32
  @@ -76,10 +76,13 @@
   
   #define JAVA_BRIDGE_CLASS_NAME ("org/apache/tomcat/service/JNIEndpoint")
    
  -static int jni_instance_created = JK_FALSE;
  +static jk_worker_t *the_singleton_jni_worker = NULL;
   
   struct jni_worker {
   
  +    int was_verified;
  +    int was_initialized;
  +
       jk_pool_t p;
       jk_pool_atom_t buf[TINY_POOL_SIZE];
       /*
  @@ -170,9 +173,6 @@
   
   static void detach_from_jvm(jni_worker_t *p);
   
  -static void append_libpath(jk_pool_t *p, 
  -                           const char *libpath);
  -  
   static int JK_METHOD service(jk_endpoint_t *e, 
                                jk_ws_service_t *s,
                                jk_logger_t *l,
  @@ -235,6 +235,10 @@
           char *str_config = NULL;
           JNIEnv *env;
   
  +        if(p->was_verified) {
  +            return JK_TRUE;
  +        }
  +
           if(jk_get_worker_mx(props, p->name, &mem_config)) {
               p->tomcat_mx = mem_config;
           }
  @@ -277,7 +281,7 @@
           }
           
           if(jk_get_worker_libpath(props, p->name, &str_config)) {
  -            append_libpath(&p->p, str_config);
  +            jk_append_libpath(&p->p, str_config);
           }
   
   
  @@ -285,6 +289,7 @@
               if(open_jvm(p, &env, l)) {
                   if(get_bridge_object(p, env, l)) {
                       if(get_method_ids(p, env, l)) {
  +                        p->was_verified = JK_TRUE;
                           return JK_TRUE;
                       }
                   }
  @@ -307,6 +312,10 @@
           jni_worker_t *p = pThis->worker_private;
           JNIEnv *env;
   
  +        if(p->was_initialized) {
  +            return JK_TRUE;
  +        }
  +
           if(!p->jvm ||
              !p->jk_java_bridge_object ||
              !p->jk_service_method     ||
  @@ -339,7 +348,12 @@
                                          stderr_name);
   
               detach_from_jvm(p);
  -            return rc == 0 ? JK_FALSE : JK_TRUE;
  +
  +            if(rc) {
  +                p->was_initialized = JK_TRUE; 
  +                return JK_TRUE;
  +            }
  +            return JK_FALSE;
           }
       }
       return JK_FALSE;
  @@ -409,9 +423,9 @@
   {
   
       if(NULL != name && NULL != w) {
  -        if(jni_instance_created) {
  -            *w = NULL;
  -            return JK_FALSE;
  +        if(the_singleton_jni_worker) {
  +            *w = the_singleton_jni_worker;
  +            return JK_TRUE;
           } else {
               jni_worker_t *private_data = 
                   (jni_worker_t *)malloc(sizeof(jni_worker_t ));
  @@ -425,6 +439,8 @@
                   private_data->name = jk_pool_strdup(&private_data->p, name);          
   
                   if(private_data->name) {
  +                    private_data->was_verified          = JK_FALSE;
  +                    private_data->was_initialized       = JK_FALSE;
                       private_data->jvm                   = NULL; 
                       private_data->jk_java_bridge_object = NULL;
                       private_data->jk_java_bridge_class  = NULL;
  @@ -447,6 +463,7 @@
                       private_data->worker.destroy        = destroy;
   
                       *w = &private_data->worker;
  +                    the_singleton_jni_worker = &private_data->worker; 
                       return JK_TRUE;
                   }
   
  @@ -624,34 +641,4 @@
   static void detach_from_jvm(jni_worker_t *p)
   {
       (*(p->jvm))->DetachCurrentThread(p->jvm);
  -}
  -
  -static void append_libpath(jk_pool_t *p, 
  -                           const char *libpath)
  -{
  -    char *env = NULL;
  -    char *current = getenv(PATH_ENV_VARIABLE);
  -
  -    if(current) {
  -        env = jk_pool_alloc(p, strlen(PATH_ENV_VARIABLE) + 
  -                               strlen(current) + 
  -                               strlen(libpath) + 5);
  -        if(env) {
  -            sprintf(env, "%s=%s%c%s", 
  -                    PATH_ENV_VARIABLE, 
  -                    libpath, 
  -                    PATH_SEPERATOR, 
  -                    current);
  -        }
  -    } else {
  -        env = jk_pool_alloc(p, strlen(PATH_ENV_VARIABLE) +                               
  -                               strlen(libpath) + 5);
  -        if(env) {
  -            sprintf(env, "%s=%s", PATH_ENV_VARIABLE, libpath);
  -        }
  -    }
  -
  -    if(env) {
  -        putenv(env);
  -    }
   }
  
  
  
  1.2       +42 -1     jakarta-tomcat/src/native/jk/jk_map.c
  
  Index: jk_map.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/native/jk/jk_map.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jk_map.c	2000/04/17 09:47:22	1.1
  +++ jk_map.c	2000/05/01 12:30:32	1.2
  @@ -56,7 +56,7 @@
   /***************************************************************************
    * Description: General purpose map object                                 *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
  - * Version:     $Revision: 1.1 $                                               *
  + * Version:     $Revision: 1.2 $                                               *
    ***************************************************************************/
   
   #include "jk_global.h"
  @@ -82,6 +82,7 @@
   static void trim_prp_comment(char *prp);
   static int trim(char *s);
   static int map_realloc(jk_map_t *m);
  +static char *update_env_variables(char *value, jk_map_t *m);
   
   int map_alloc(jk_map_t **m)
   {
  @@ -288,7 +289,7 @@
           FILE *fp = fopen(f, "r");
           
           if(fp) {
  -            char buf[LENGTH_OF_LINE + 1];
  +            char buf[LENGTH_OF_LINE + 1];            
               char *prp;
               
               rc = JK_TRUE;
  @@ -302,6 +303,7 @@
                           v++;                        
                           if(strlen(v) && strlen(prp)) {
                               char *oldv = map_get_string(m, prp, NULL);
  +                            v = update_env_variables(v, m);
                               if(oldv) {
                                   char *tmpv = jk_pool_alloc(&m->p, 
                                                              strlen(v) + strlen(oldv) + 3);
  @@ -420,3 +422,42 @@
   
       return JK_FALSE;
   }
  +
  +static char *update_env_variables(char *value, jk_map_t *m)
  +{
  +    char *rc = value;
  +    char *env_start = value;
  +
  +    while(env_start = strstr(env_start, "$(")) {
  +        char *env_end = strstr(env_start, ")");
  +        if(env_end) {
  +            char env_name[LENGTH_OF_LINE + 1] = ""; 
  +            char *env_value;
  +
  +            *env_end = '\0';
  +            strcpy(env_name, env_start + 2);
  +            *env_end = ')';
  +
  +            env_value = map_get_string(m, env_name, NULL);
  +            if(env_value) {
  +                char *new_value = jk_pool_alloc(&m->p, 
  +                                                (sizeof(char) * (strlen(rc) + strlen(env_value))));
  +                if(!new_value) {
  +                    break;
  +                }
  +                *env_start = '\0';
  +                strcpy(new_value, rc);
  +                strcat(new_value, env_value);
  +                strcat(new_value, env_end + 1);
  +                rc = new_value;
  +                env_start = rc;
  +            } else {
  +                env_start = env_end;
  +            }
  +        } else {
  +            break;
  +        }
  +    }
  +
  +    return rc;
  +}
  \ No newline at end of file
  
  
  
  1.2       +30 -0     jakarta-tomcat/src/native/jk/jk_util.c
  
  Index: jk_util.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/native/jk/jk_util.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jk_util.c	2000/04/17 09:47:21	1.1
  +++ jk_util.c	2000/05/01 12:30:32	1.2
  @@ -56,7 +56,7 @@
   /***************************************************************************
    * Description: Utility functions (mainly configuration)                   *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
  - * Version:     $Revision: 1.1 $                                               *
  + * Version:     $Revision: 1.2 $                                               *
    ***************************************************************************/
   
   
  @@ -567,3 +567,33 @@
   
       return rc;
   }
  +
  +void jk_append_libpath(jk_pool_t *p, 
  +                       const char *libpath)
  +{
  +    char *env = NULL;
  +    char *current = getenv(PATH_ENV_VARIABLE);
  +
  +    if(current) {
  +        env = jk_pool_alloc(p, strlen(PATH_ENV_VARIABLE) + 
  +                               strlen(current) + 
  +                               strlen(libpath) + 5);
  +        if(env) {
  +            sprintf(env, "%s=%s%c%s", 
  +                    PATH_ENV_VARIABLE, 
  +                    libpath, 
  +                    PATH_SEPERATOR, 
  +                    current);
  +        }
  +    } else {
  +        env = jk_pool_alloc(p, strlen(PATH_ENV_VARIABLE) +                               
  +                               strlen(libpath) + 5);
  +        if(env) {
  +            sprintf(env, "%s=%s", PATH_ENV_VARIABLE, libpath);
  +        }
  +    }
  +
  +    if(env) {
  +        putenv(env);
  +    }
  +}
  \ No newline at end of file
  
  
  
  1.2       +3 -0      jakarta-tomcat/src/native/jk/jk_util.h
  
  Index: jk_util.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/native/jk/jk_util.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jk_util.h	2000/04/17 09:47:21	1.1
  +++ jk_util.h	2000/05/01 12:30:32	1.2
  @@ -56,7 +56,7 @@
   /***************************************************************************
    * Description: Various utility functions                                  *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
  - * Version:     $Revision: 1.1 $                                               *
  + * Version:     $Revision: 1.2 $                                               *
    ***************************************************************************/
   #ifndef _JK_UTIL_H
   #define _JK_UTIL_H
  @@ -155,6 +155,9 @@
   char **jk_parse_sysprops(jk_pool_t *p, 
                            const char *sysprops);
           
  +
  +void jk_append_libpath(jk_pool_t *p, 
  +                       const char *libpath);
   
   #ifdef __cplusplus
   extern "C" {