TJJavaVMInitializer::TJJavaVMInitializer(TJJNIVersion prefferedVersion, const TJStringArray& options) : mOptions(options), mVersion(prefferedVersion) { std::string jreFolderPath = GetJavaHomePath(); if (jreFolderPath.empty()) throw std::runtime_error("Java home path not found"); std::string jvmFullPath(jreFolderPath + "/jre/lib/amd64/server/libjvm.so"); bool libraryLoaded = false; if (prefferedVersion == kJniChooseLatest) { int versionToCreate = kJniVersionLast; for (; (versionToCreate >= kJniVersionFirst) && !libraryLoaded; --versionToCreate) { JNIEnv* jniEnv = TJCreateJavaVm(jvmFullPath, static_cast<TJJNIVersion>(versionToCreate), options); libraryLoaded = (jniEnv != nullptr); } mVersion = static_cast<TJJNIVersion>(versionToCreate); } else { // by default create jni version 1_2 JNIEnv* jniEnv = TJCreateJavaVm(jvmFullPath, prefferedVersion, options); libraryLoaded = (jniEnv != nullptr); } if (!libraryLoaded) throw std::runtime_error("Failed to load JVM"); }
TJJavaVMInitializer::TJJavaVMInitializer(TJJNIVersion prefferedVersion, const TJStringArray& options) : mOptions(options), mVersion(prefferedVersion) { std::string jreFolderPath = GetJavaHomePathFromRegistry(); if (jreFolderPath.empty()) throw std::runtime_error("Java home path not found"); const char* const sClientPath = "\\jre\\bin\\client\\jvm.dll"; const char* const sServerPath = "\\jre\\bin\\server\\jvm.dll"; std::string jvmFullPath(jreFolderPath); jvmFullPath += sClientPath; if (!PathFileExists(jvmFullPath.c_str())) { jvmFullPath = jreFolderPath + sServerPath; } bool libraryLoaded = false; if (prefferedVersion == kJniChooseLatest) { int versionToCreate = kJniVersionLast; for (; (versionToCreate >= kJniVersionFirst) && !libraryLoaded; --versionToCreate) { JNIEnv* jniEnv = TJCreateJavaVm(jvmFullPath, static_cast<TJJNIVersion>(versionToCreate), options); libraryLoaded = (jniEnv != nullptr); } mVersion = static_cast<TJJNIVersion>(versionToCreate); } else { // by default create jni version 1_2 JNIEnv* jniEnv = TJCreateJavaVm(jvmFullPath, prefferedVersion, options); libraryLoaded = (jniEnv != nullptr); } if (!libraryLoaded) throw std::runtime_error("Failed to load jvm.dll"); }