costin 02/04/12 16:12:16 Modified: jk/native2/common jk_vm_default.c Log: Remove the JDK1.1 workarounds - it made the code unreadable. If you need 1.1 support - get the old version from CVS and create a separate jk_vm_11.c object. Or use mod_jk1. I also removed a lot of config overhead and reduced the object to it's base function - instantiate a Java VM. worker_jni will call java methods ( like start tomcat ), while channel_jni will forward the requests ( using Ajp13 encoding and protocol ) Revision Changes Path 1.8 +116 -511 jakarta-tomcat-connectors/jk/native2/common/jk_vm_default.c Index: jk_vm_default.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_vm_default.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- jk_vm_default.c 12 Apr 2002 21:49:03 -0000 1.7 +++ jk_vm_default.c 12 Apr 2002 23:12:16 -0000 1.8 @@ -74,6 +74,7 @@ * @author: Costin Manolache */ +#include "jk_global.h" #include "jk_vm.h" #include "jk_config.h" @@ -94,6 +95,22 @@ #include <jni.h> +#ifndef JNI_VERSION_1_2 + +#warning ------------------------------------------------------- +#warning JAVA 1.1 IS NO LONGER SUPPORTED +#warning ------------------------------------------------------- + +int jk2_vm_factory(jk_env_t *env, jk_pool_t *pool, + jk_bean_t *result, + char *type, char *name) +{ + return JK_FALSE; +} + +#else + + #ifndef JNI_VERSION_1_1 #define JNI_VERSION_1_1 0x00010001 #endif @@ -112,13 +129,8 @@ #define null_check(e) if ((e) == 0) return JK_FALSE - -static int jk2_open_jvm1(jk_env_t *env, jk_vm_t *p); - -#ifdef JNI_VERSION_1_2 static int jk2_detect_jvm_version(jk_env_t *env); static int jk2_open_jvm2(jk_env_t *env, jk_vm_t *p); -#endif jint (JNICALL *jni_get_default_java_vm_init_args)(void *) = NULL; jint (JNICALL *jni_create_java_vm)(JavaVM **, JNIEnv **, void *) = NULL; @@ -127,18 +139,9 @@ /* Guessing - try all those to find the right dll */ static const char *defaultVM_PATH[]={ - "$(JAVA_HOME)$(fs)jre$(fs)bin$(fs)classic$(fs)libjvm.$(so)", - "$(JAVA_HOME)$(fs)jre$(fs)lib$(fs)$(arch)$(fs)classic$(fs)libjvm.$(so)", - "$(JAVA_HOME)$(fs)jre$(fs)bin$(fs)classic$(fs)jvm.$(so)", - NULL -}; - -/** Where to try to find jk jars ( if user doesn't specify it explicitely ) */ -static const char *defaultJK_PATH[]={ - "$(tomcat.home)$(fs)modules$(fs)jk$(fs)WEB-INF$(fs)lib$(fs)tomcat-jk2.jar", - "$(tomcat.home)$(fs)modules$(fs)jk$(fs)WEB-INF$(fs)lib$(fs)tomcat-utils.jar", - "$(tomcat.home)$(fs)webapps(fs)jk$(fs)WEB-INF$(fs)lib$(fs)tomcat-jk2.jar", - "$(tomcat.home)$(fs)webapps(fs)jk$(fs)WEB-INF$(fs)lib$(fs)tomcat-utils.jar", + "${JAVA_HOME}${fs}jre${fs}bin${fs}classic${fs}libjvm.${so}", + "${JAVA_HOME}${fs}jre${fs}lib${fs}${arch}${fs}classic${fs}libjvm.${so}", + "${JAVA_HOME}${fs}jre${fs}bin${fs}classic${fs}jvm.${so}", NULL }; @@ -169,11 +172,14 @@ #endif - -int jk2_vm_loadJvm(jk_env_t *env, jk_vm_t *p) +/** Load the VM. Must be called after init. + */ +static int jk2_vm_loadJvm(jk_env_t *env, jk_vm_t *jkvm) { + + #ifdef WIN32 - HINSTANCE hInst = LoadLibrary(p->jvm_dll_path); + HINSTANCE hInst = LoadLibrary(jkvm->jvm_dll_path); if(hInst) { (FARPROC)jni_create_java_vm = GetProcAddress(hInst, "JNI_CreateJavaVM"); @@ -195,6 +201,7 @@ FreeLibrary(hInst); } + return JK_TRUE; #elif defined(NETWARE) int javaNlmHandle = FindNLMHandle("JVM"); if (0 == javaNlmHandle) { @@ -222,11 +229,11 @@ return JK_TRUE; #else void *handle; - handle = dlopen(p->jvm_dll_path, RTLD_NOW | RTLD_GLOBAL); + handle = dlopen(jkvm->jvm_dll_path, RTLD_NOW | RTLD_GLOBAL); if(handle == NULL ) { env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Can't load native library %s : %s\n", p->jvm_dll_path, + "Can't load native library %s : %s\n", jkvm->jvm_dll_path, dlerror()); return JK_FALSE; } @@ -242,26 +249,27 @@ { env->l->jkLog(env, env->l, JK_LOG_EMERG, "jni.loadJvm() Can't resolve symbols %s\n", - p->jvm_dll_path ); + jkvm->jvm_dll_path ); dlclose(handle); return JK_FALSE; } /* env->l->jkLog(env, env->l, JK_LOG_INFO, */ /* "jni.loadJvm() %s symbols resolved\n", - p->jvm_dll_path); */ + jkvm->jvm_dll_path); */ return JK_TRUE; #endif } -void *jk2_vm_attach(jk_env_t *env, jk_vm_t *p) +static void *jk2_vm_attach(jk_env_t *env, jk_vm_t *jkvm) { JNIEnv *rc = NULL; int err; - JavaVM *jvm = (JavaVM *)p->jvm; + JavaVM *jvm = (JavaVM *)jkvm->jvm; + + if( jvm == NULL ) return NULL; - #if defined LINUX && defined APACHE2_SIGHACK /* [V] This message is important. If there are signal mask issues, * * the JVM usually hangs when a new thread tries to attach to it */ @@ -271,15 +279,14 @@ #endif err= (*jvm)->GetEnv( jvm, (void **)&rc, JNI_VERSION_1_2 ); - if( err != 0 ) { + if( ( err != 0 ) && + ( err != JNI_EDETACHED) ) { env->l->jkLog(env, env->l, JK_LOG_INFO, "vm.attach() GetEnv failed %d\n", err); } err = (*jvm)->AttachCurrentThread(jvm, -#ifdef JNI_VERSION_1_2 (void **) -#endif &rc, NULL); if( err != 0 ) { env->l->jkLog(env, env->l, JK_LOG_ERROR, @@ -291,10 +298,10 @@ } -void jk2_vm_detach(jk_env_t *env, jk_vm_t *p) +static void jk2_vm_detach(jk_env_t *env, jk_vm_t *jkvm) { int err; - JavaVM *jvm = (JavaVM *)p->jvm; + JavaVM *jvm = (JavaVM *)jkvm->jvm; if( jvm == NULL ) { return; @@ -326,8 +333,8 @@ /* Some guessing - to spare the user ( who might know less than we do ). */ -char* jk2_vm_guessJvmDll(jk_env_t *env, jk_map_t *props, - jk_vm_t *jniw) +static char* jk2_vm_guessJvmDll(jk_env_t *env, jk_map_t *props, + jk_vm_t *jkvm) { char *jvm; jk_pool_t *p=props->pool; @@ -358,247 +365,86 @@ } -int jk2_vm_openVM(jk_env_t *env, jk_vm_t *p) +static int jk2_vm_initVM(jk_env_t *env, jk_vm_t *jkvm) { int jvm_version; - -#if defined LINUX && defined APACHE2_SIGHACK - /* [V] This message is important. If there are signal mask issues, * - * the JVM usually hangs when a new thread tries to attach to it */ - /* XXX do we need to do that on _each_ attach or only when we create - the vm ??? */ - jk2_linux_signal_hack(); -#endif - - /* That's kind of strange - if we have JNI_VERSION_1_2 I assume - we also have 1.2, what do we detect ???? */ -#ifdef JNI_VERSION_1_2 - jvm_version= jk2_detect_jvm_version(env); - - switch(jvm_version) { - case JNI_VERSION_1_1: - return jk2_open_jvm1(env, p); - case JNI_VERSION_1_2: - return jk2_open_jvm2(env, p); - default: - return JK_FALSE; - } -#else - /* [V] Make sure this is _really_ visible */ - #warning ------------------------------------------------------- - #warning NO JAVA 2 HEADERS! SUPPORT FOR JAVA 2 FEATURES DISABLED - #warning ------------------------------------------------------- - return jk2_open_jvm1(env, p, jniEnv); -#endif -} - -static int jk2_open_jvm1(jk_env_t *env, jk_vm_t *p) -{ - JDK1_1InitArgs vm_args; - int err; - JavaVM *jvm = (JavaVM *)p->jvm; + JDK1_1InitArgs vm_args11; + jk_map_t *props=jkvm->properties; + JavaVMInitArgs vm_args; JNIEnv *penv; + JavaVMOption options[100]; + JavaVM *jvm; + int optn = 0, err; + char* tmp; - env->l->jkLog(env, env->l, JK_LOG_INFO, "vm.open1()\n"); - - vm_args.version = JNI_VERSION_1_1; - - err= jni_get_default_java_vm_init_args(&vm_args); - if(0 != err ) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "vm.open1() Fail-> can't get default vm init args\n"); - return JK_FALSE; - } - env->l->jkLog(env, env->l, JK_LOG_INFO, - "vm.open1() got default jvm args\n"); - - if(vm_args.classpath) { - unsigned len = strlen(vm_args.classpath) + - strlen(p->tomcat_classpath) + 3; - char *tmp = p->pool->alloc(env, p->pool, len); - if(tmp==NULL) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Fail-> allocation error for classpath\n"); - return JK_FALSE; - } - sprintf(tmp, "%s%c%s", p->tomcat_classpath, - PATH_SEPERATOR, vm_args.classpath); - p->tomcat_classpath = tmp; + /** Make sure we have the vm dll */ + if( jkvm->jvm_dll_path ==NULL || + ! jk2_file_exists(env, jkvm->jvm_dll_path )) { + jkvm->jvm_dll_path=jk2_vm_guessJvmDll( env, props, jkvm ); } - vm_args.classpath = p->tomcat_classpath; - - if(p->tomcat_mx) { - vm_args.maxHeapSize = p->tomcat_mx; - } - - if(p->tomcat_ms) { - vm_args.minHeapSize = p->tomcat_ms; - } - - if(p->sysprops) { - vm_args.properties = p->sysprops; + if(!jkvm->jvm_dll_path ) { + env->l->jkLog(env, env->l, JK_LOG_EMERG, + "vm.init(): Fail-> no jvm_dll_path\n"); + return JK_FALSE; } + + env->l->jkLog(env, env->l, JK_LOG_INFO, "vm.init(): Jni lib: %s\n", + jkvm->jvm_dll_path ); - err=jni_create_java_vm(&jvm, &penv, &vm_args); - - if (JNI_EEXIST == err) { - int vmCount; - - env->l->jkLog(env, env->l, JK_LOG_INFO, - "vm.open1() try to attach to existing vm\n"); - err=jni_get_created_java_vms(&jvm, 1, &vmCount); - - if (NULL == jvm) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "vm.open1() error attaching %d\n", err); - return JK_FALSE; - } + err=jk2_vm_loadJvm(env, jkvm ); - p->jvm=jvm; - - } else if( err != 0 ) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Fail-> could not create JVM, code: %d \n", err); + if( err!=JK_TRUE ) { + env->l->jkLog(env, env->l, JK_LOG_EMERG, + "jni.loadJvm() Error - can't load jvm dll\n"); + /* [V] no detach needed here */ return JK_FALSE; } - p->jvm=jvm; - env->l->jkLog(env, env->l, JK_LOG_INFO, - "vm.open1() done\n"); - return JK_TRUE; -} +#if defined LINUX && defined APACHE2_SIGHACK + /* [V] This message is important. If there are signal mask issues, * + * the JVM usually hangs when a new thread tries to attach to it */ + /* XXX do we need to do that on _each_ attach or only when we create + the vm ??? */ + jk2_linux_signal_hack(); +#endif -#ifdef JNI_VERSION_1_2 -static int jk2_detect_jvm_version(jk_env_t *env) -{ - JDK1_1InitArgs vm_args; + /* That's kind of strange - if we have JNI_VERSION_1_2 I assume + we also have 1.2, what do we detect ???? */ /* [V] Idea: ask for 1.2. If the JVM is 1.1 it will return 1.1 instead */ /* Note: asking for 1.1 won't work, 'cause 1.2 JVMs will return 1.1 */ - vm_args.version = JNI_VERSION_1_2; + vm_args11.version = JNI_VERSION_1_2; - if(0 != jni_get_default_java_vm_init_args(&vm_args)) { + if(0 != jni_get_default_java_vm_init_args(&vm_args11)) { env->l->jkLog(env, env->l, JK_LOG_EMERG, "vm.detect() Fail-> can't get default vm init args\n"); return JK_FALSE; } - env->l->jkLog(env, env->l, JK_LOG_INFO, - "vm.detect() found: %X\n", vm_args.version); - - return vm_args.version; -} - -static char* jk2_build_opt_str(jk_env_t *env, jk_pool_t *pool, - char* opt_name, char* opt_value) -{ - unsigned len = strlen(opt_name) + strlen(opt_value) + 2; - - /* [V] IMHO, these should not be deallocated as long as the JVM runs */ - char *tmp = pool->alloc(env, pool, len); + jvm_version= vm_args11.version; - if(tmp) { - sprintf(tmp, "%s%s", opt_name, opt_value); - return tmp; - } else { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Fail-> jk2_build_opt_str allocation error for %s\n", - opt_name); - return NULL; - } -} - -static char* jk2_build_opt_int(jk_env_t *env, jk_pool_t *pool, - char* opt_name, int opt_value) -{ - /* [V] this should suffice even for 64-bit int */ - unsigned len = strlen(opt_name) + 20 + 2; - /* [V] IMHO, these should not be deallocated as long as the JVM runs */ - char *tmp = pool->alloc(env, pool, len); - - if(tmp) { - sprintf(tmp, "%s%d", opt_name, opt_value); - return tmp; - } else { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Fail-> jk2_build_opt_int allocation error for %s\n", - opt_name); - return NULL; + if(jvm_version != JNI_VERSION_1_2 ) { + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "vm.detect() found: %X expecting 1.2\n", vm_args.version); + return JK_FALSE; } -} - -static int jk2_open_jvm2(jk_env_t *env, jk_vm_t *p) -{ - JavaVMInitArgs vm_args; - JNIEnv *penv; - JavaVMOption options[100]; - JavaVM *jvm; - int optn = 0, err; - char* tmp; - vm_args.version = JNI_VERSION_1_2; vm_args.options = options; - if(p->tomcat_classpath) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.openJvm2() CLASSPATH=%s\n", p->tomcat_classpath); - tmp = jk2_build_opt_str(env, p->pool, "-Djava.class.path=", - p->tomcat_classpath); - null_check(tmp); - options[optn++].optionString = tmp; - } - - if(p->tomcat_mx) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.openJvm2() -Xmx %d\n", p->tomcat_mx); - tmp = jk2_build_opt_int(env, p->pool, "-Xmx", p->tomcat_mx); - null_check(tmp); - options[optn++].optionString = tmp; - } - - if(p->tomcat_ms) { + while(jkvm->options[optn]) { env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.openJvm2() -Xms %d\n", p->tomcat_ms); - tmp = jk2_build_opt_int(env, p->pool, "-Xms", p->tomcat_ms); - null_check(tmp); - options[optn++].optionString = tmp; - } - - if(p->sysprops) { - int i = 0; - while(p->sysprops[i]) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.openJvm2() -D%s\n", p->sysprops[i]); - tmp = jk2_build_opt_str(env, p->pool, "-D", p->sysprops[i]); - null_check(tmp); - options[optn++].optionString = tmp; - i++; - } - } - - if(p->java2opts) { - int i=0; - - while(p->java2opts[i]) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.openJvm2() java2opts: %s\n", p->java2opts[i]); - /* Pass it "as is" */ - options[optn++].optionString = p->java2opts[i++]; - } + "vm.openJvm2() Option: %s\n", jkvm->options[optn]); + /* Pass it "as is" */ + options[optn].optionString = jkvm->options[optn]; + optn++; } vm_args.nOptions = optn; - if(p->java2lax) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.openJvm2() ignore unknown options\n"); - vm_args.ignoreUnrecognized = JNI_TRUE; - } else { - vm_args.ignoreUnrecognized = JNI_FALSE; - } + vm_args.ignoreUnrecognized = JNI_TRUE; err=jni_create_java_vm(&jvm, &penv, &vm_args); @@ -616,7 +462,7 @@ return JK_FALSE; } - p->jvm=jvm; + jkvm->jvm=jvm; return JK_TRUE; } else if( err!=0 ) { env->l->jkLog(env, env->l, JK_LOG_EMERG, @@ -624,106 +470,25 @@ return JK_FALSE; } - p->jvm=jvm; + jkvm->jvm=jvm; env->l->jkLog(env, env->l, JK_LOG_INFO, "vm.open2() done\n"); return JK_TRUE; } -#endif - -/** 'Guess' tomcat.home from properties or - env. Set it as 'tomcat.home'. ( XXX try 'standard' - locations, relative to apache home, etc ) -*/ -static char *jk2_guessTomcatHome(jk_env_t *env, jk_map_t *props ) -{ - /* TOMCAT_HOME or CATALINA_HOME */ - char *tomcat_home; - - tomcat_home=props->get( env, props, "TOMCAT_HOME" ); - if( tomcat_home==NULL ) { - tomcat_home=props->get( env, props, "CATALINA_HOME" ); - } - if( tomcat_home == NULL ) { - tomcat_home=getenv( "TOMCAT_HOME" ); - } - if( tomcat_home == NULL ) { - tomcat_home=getenv( "CATALINA_HOME" ); - } - if( tomcat_home == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, "Can't find tomcat\n"); - return NULL; - } - - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.jk2_guessTomcatHome() %s\n", tomcat_home); - - props->put(env, props, "tomcat.home", - props->pool->pstrdup( env, props->pool, tomcat_home ), NULL); - - return tomcat_home; -} - -static char *jk2_guessClassPath(jk_env_t *env, jk_map_t *props) -{ - /* Guess 3.3, 4.0, 4.1 'standard' locations */ - char *jkJar; - jk_pool_t *p=props->pool; - const char **current=defaultJK_PATH; - - jk2_guessTomcatHome( env, props ); - - while( *current != NULL ) { - jkJar = jk2_config_replaceProperties(env, props, p, - (char *)p->pstrdup( env, p, *current )); - - if( jkJar!=NULL && jk2_file_exists(env, jkJar)) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.guessJkJar() %s\n", jkJar); - return jkJar; - } - - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.guessJkJar() failed %s\n", *current); - current++; - } - - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.guessJkJar() failed\n"); - - return NULL; -} static int JK_METHOD jk2_jk_vm_setProperty(jk_env_t *env, jk_bean_t *mbean, char *name, void *valueP ) { - jk_vm_t *_this=mbean->object; + jk_vm_t *jkvm=mbean->object; char *value=valueP; - if( strcmp( name, "mx" )==0 ) { - /* atoi + K, M */ - _this->tomcat_mx = jk2_config_str2int(env, value); - } else if( strcmp( name, "ms" )==0 ) { - _this->tomcat_ms = jk2_config_str2int(env, value); - } else if( strcmp( name, "class_path" )==0 ) { - _this->tomcat_classpath=value; - } else if( strcmp( name, "jvm_lib" )==0 ) { - _this->jvm_dll_path=value; - } else if( strcmp( name, "sysprops" )==0 ) { - _this->sysprops = jk2_config_split( env, _this->pool, - value, "*", NULL); -#ifdef JNI_VERSION_1_2 - } else if( strcmp( name, "java2opts" )==0 ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.validate() java2opts %s\n", value); - _this->java2opts = jk2_config_split( env, _this->pool, - value, "*", NULL); - } else if( strcmp( name, "java2lax" )==0 ) { - int int_config=atoi( value ); - _this->java2lax = int_config ? JK_TRUE : JK_FALSE; -#endif + if( strcmp( name, "OPT" )==0 ) { + jkvm->options[jkvm->nOptions]=value; + jkvm->nOptions++; + } else if( strcmp( name, "JVM" )==0 ) { + jkvm->jvm_dll_path=value; } else { return JK_FALSE; } @@ -731,196 +496,36 @@ return JK_TRUE; } -/** Initialize the vm properties - */ -int jk2_jk_vm_init(jk_env_t *env, jk_vm_t *_this) -{ - char *str_config; - int int_config; - jk_map_t *props=_this->properties; - - if(_this->tomcat_classpath == NULL ) { - _this->tomcat_classpath = jk2_guessClassPath( env, props ); - } - - if(_this->tomcat_classpath == NULL ) { - char *cp=getenv( "CLASSPATH" ); - if( cp!=NULL ) { - _this->tomcat_classpath=props->pool->pstrdup( env, props->pool,cp); - env->l->jkLog(env, env->l, JK_LOG_INFO, "Using CLASSPATH %s\n",cp); - } - } - if( _this->tomcat_classpath == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, "Fail-> no classpath\n"); - return JK_FALSE; - } - if( _this->jvm_dll_path ==NULL || - ! jk2_file_exists(env, _this->jvm_dll_path )) { - _this->jvm_dll_path=jk2_vm_guessJvmDll( env, props, _this ); - } - - if(!_this->jvm_dll_path ) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Fail-> no jvm_dll_path\n"); - return JK_FALSE; - } - env->l->jkLog(env, env->l, JK_LOG_INFO, "Jni lib: %s\n", - _this->jvm_dll_path); - - return JK_TRUE; -} - -int jk2_jk_vm_factory(jk_env_t *env, jk_pool_t *pool, - jk_bean_t *result, - char *type, char *name) +int jk2_vm_factory(jk_env_t *env, jk_pool_t *pool, + jk_bean_t *result, + char *type, char *name) { - jk_vm_t *_this; - - _this = (jk_vm_t *)pool->calloc(env, pool, sizeof(jk_vm_t )); + jk_vm_t *jkvm; + jk_workerEnv_t *workerEnv; + + jkvm = (jk_vm_t *)pool->calloc(env, pool, sizeof(jk_vm_t )); - _this->pool=pool; + jkvm->pool=pool; - _this->tomcat_classpath = NULL; - _this->jvm_dll_path = NULL; - _this->tomcat_ms = 0; - _this->tomcat_mx = 0; - _this->sysprops = NULL; -#ifdef JNI_VERSION_1_2 - _this->java2opts = NULL; - _this->java2lax = JK_TRUE; -#endif + jkvm->jvm_dll_path = NULL; + jkvm->options = pool->calloc( env, pool, 64 * sizeof( char *)); + jkvm->nOptions =0; - _this->open=jk2_vm_openVM; - _this->load=jk2_vm_loadJvm; - _this->init=jk2_jk_vm_init; - _this->attach=jk2_vm_attach; - _this->detach=jk2_vm_detach; + jkvm->init=jk2_vm_initVM; + jkvm->attach=jk2_vm_attach; + jkvm->detach=jk2_vm_detach; - result->object=_this; + result->object=jkvm; result->setAttribute=jk2_jk_vm_setProperty; - _this->mbean=result; - - return JK_TRUE; -} - -/* -------------------- Less usefull -------------------- */ + jkvm->mbean=result; -/* DEPRECATED */ + workerEnv=env->getByName( env, "workerEnv" ); + jkvm->properties=workerEnv->initData; -static const char *defaultLIB_PATH[]={ - "$(JAVA_HOME)$(fs)jre$(fs)lib$(fs)$(arch)$(fs)classic", - "$(JAVA_HOME)$(fs)jre$(fs)lib$(fs)$(arch)", - "$(JAVA_HOME)$(fs)jre$(fs)lib$(fs)$(arch)$(fs)native_threads", - NULL -}; - -static int jk2_jk_dir_exists(jk_env_t *env, const char *f) -{ - if(f) { - struct stat st; - if((0 == stat(f, &st)) && (st.st_mode & S_IFDIR)) { - return JK_TRUE; - } - } - return JK_FALSE; -} - -static void jk2_vm_appendLibpath(jk_env_t *env, jk_pool_t *pool, - const char *libpath) -{ - char *envVar = NULL; - char *current = getenv(PATH_ENV_VARIABLE); - - if(current) { - envVar = pool->alloc(env, pool, strlen(PATH_ENV_VARIABLE) + - strlen(current) + - strlen(libpath) + 5); - if(envVar) { - sprintf(envVar, "%s=%s%c%s", - PATH_ENV_VARIABLE, - libpath, - PATH_SEPERATOR, - current); - } - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.appendLibPath() %s %s %s\n", - current, libpath, envVar); - } else { - envVar = pool->alloc(env, pool, strlen(PATH_ENV_VARIABLE) + - strlen(libpath) + 5); - if(envVar) { - sprintf(envVar, "%s=%s", PATH_ENV_VARIABLE, libpath); - } - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.appendLibPath() %s %s %s\n", - current, libpath, envVar); - } - - if(envVar) { - putenv(envVar); - } -} - - -static void jk2_addDefaultLibPaths(jk_env_t *env, jk_map_t *props, - jk_vm_t *jniw) -{ - jk_pool_t *p=props->pool; - const char **current=defaultLIB_PATH; - char *libp; - - while( *current != NULL ) { - libp = jk2_config_replaceProperties(env, props, p, - p->pstrdup( env, p, *current )); - if( libp!=NULL && jk2_jk_dir_exists(env, libp)) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.jk2_addDefaultLibPaths() %s\n", libp); - jk2_vm_appendLibpath(env, p, libp); - } else { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "jni.jk2_addDefaultLibPaths() failed %s\n", libp); - } - current++; - } -} - -jobject jk2_vm_newObject(jk_env_t *env, jk_vm_t *p, - JNIEnv *jniEnv, char *className, jclass objClass) -{ - jmethodID constructor_method_id; - jobject objInst; - - constructor_method_id = (*jniEnv)->GetMethodID(jniEnv, - objClass, - "<init>", /* method name */ - "()V"); /* method sign */ - if(!constructor_method_id) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Can't find constructor\n"); - return NULL; - } - - objInst = (*jniEnv)->NewObject(jniEnv, objClass, - constructor_method_id); + workerEnv->vm=jkvm; - if(objInst == NULL ) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Can't create new bridge object\n"); - return NULL; - } - - objInst = - (jobject)(*jniEnv)->NewGlobalRef(jniEnv, objInst); - - if(objInst==NULL) { - env->l->jkLog(env, env->l, JK_LOG_EMERG, - "Can't create global ref to bridge object\n"); - return NULL; - } - - env->l->jkLog(env, env->l, JK_LOG_DEBUG, - "In get_bridge_object, bridge built, done\n"); - return objInst; + return JK_TRUE; } +#endif /* Java2 */
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>