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