mturk       2002/07/01 08:44:16

  Modified:    jk/native2/common jk_worker_jni.c
  Log:
  On worker destroy call the TomcatStarter with the stop arg
  to gracefuly shutdown the Tomcat.
  
  Revision  Changes    Path
  1.21      +36 -23    jakarta-tomcat-connectors/jk/native2/common/jk_worker_jni.c
  
  Index: jk_worker_jni.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_worker_jni.c,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- jk_worker_jni.c   29 Jun 2002 18:29:09 -0000      1.20
  +++ jk_worker_jni.c   1 Jul 2002 15:44:16 -0000       1.21
  @@ -152,6 +152,10 @@
           } else {
               jniWorker->className = value;
           }
  +    /* XXX Instead of ARG=start split to something like:
  +     * startup=start
  +     * shutdown=stop
  +     */
       } else if( strcmp( name, "ARG" )==0 ) {
           jniWorker->args[jniWorker->nArgs]=value;
           jniWorker->nArgs++;
  @@ -308,7 +312,14 @@
       jk_worker_t *_this=bean->object;
       jni_worker_data_t *jniWorker;
       jk_vm_t *vm=_this->workerEnv->vm;
  -
  +    JNIEnv *jniEnv;
  +    jstring cmd_line = NULL;
  +    jstring stdout_name = NULL;
  +    jstring stderr_name = NULL;
  +    jclass jstringClass;
  +    jarray jargs;
  +    jstring arg=NULL;
  +    
       if(!_this  || ! _this->worker_private) {
           env->l->jkLog(env, env->l, JK_LOG_EMERG,
                         "In destroy, assert failed - invalid parameters\n");
  @@ -317,28 +328,30 @@
   
       jniWorker = _this->worker_private;
   
  -    /* A MUCH better solution is to use the standard JDK1.3 mechanism.
  -       Or Ajp13 shutdown.
  -       I'll implement JDK1.3 after I check if I do need to do anything
  -       on the C side ( i.e. call System.exit() explicitely - I have a feeling
  -       the smart VM guys have added a hook to at_exit ). 
  -    */
  -    
  -/*     if(! jniWorker->jk_shutdown_method) { */
  -/*         env->l->jkLog(env, env->l, JK_LOG_EMERG, */
  -/*                       "In destroy, Tomcat not intantiated\n"); */
  -/*         return JK_ERR; */
  -/*     } */
  -
  -/*     if((jniEnv = vm->attach(env, vm))) { */
  -/*         env->l->jkLog(env, env->l, JK_LOG_INFO,  */
  -/*                       "jni.destroy(), shutting down Tomcat...\n"); */
  -/*         (*jniEnv)->CallStaticVoidMethod(jniEnv, */
  -/*                                   jniWorker->jk_java_bridge_class, */
  -/*                                   jniWorker->jk_shutdown_method); */
  -/*         vm->detach(env, vm); */
  -/*     } */
  -
  +    if((jniEnv = vm->attach(env, vm))) {
  +        env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                       "jni.destroy(), shutting down Tomcat...\n");
  +
  +        jstringClass=(*jniEnv)->FindClass(jniEnv, "java/lang/String" );
  +        jargs=(*jniEnv)->NewObjectArray(jniEnv, 1, jstringClass, NULL);
  +
  +        /* XXX Need to make that arg customizable 
  +        */
  +        arg=(*jniEnv)->NewStringUTF(jniEnv, "stop" );
  +        env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                          "jni.destroy() ARG stop\n");
  +        (*jniEnv)->SetObjectArrayElement(jniEnv, jargs, 0, arg );        
  +    
  +        env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                      "jni.destroy() calling main()...\n");
  +    
  +        (*jniEnv)->CallStaticVoidMethod(jniEnv,
  +                                    jniWorker->jk_java_bridge_class,
  +                                    jniWorker->jk_main_method,
  +                                    jargs,stdout_name,stderr_name);
  +        
  +        vm->destroy(env, vm);
  +    }
       env->l->jkLog(env, env->l, JK_LOG_INFO, "jni.destroy() done\n");
   
       return JK_OK;
  
  
  

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

Reply via email to