Exemplo n.º 1
0
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");
}
Exemplo n.º 2
0
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");
}