/// <summary> /// Determines whether we are on Java 9. /// </summary> private static bool IsJava9() { var args = new JvmInitArgs { version = JNI_VERSION_9 }; // Returns error on Java 8 and lower. var res = JvmDll.Instance.GetDefaultJvmInitArgs(&args); return(res == JniResult.Success); }
/// <summary> /// Gets the JVM pointer. /// </summary> private static IntPtr GetJvmPtr(IList <string> options) { IntPtr jvm; int existingJvmCount; // Use existing JVM if present. var res = JvmDll.Instance.GetCreatedJvms(out jvm, 1, out existingJvmCount); if (res != JniResult.Success) { throw new IgniteException("JNI_GetCreatedJavaVMs failed: " + res); } if (existingJvmCount > 0) { return(jvm); } var args = new JvmInitArgs { version = JNI_VERSION_1_6 }; if (options != null && options.Count > 0) { args.nOptions = options.Count; var opt = new JvmOption[options.Count]; for (int i = 0; i < options.Count; i++) { opt[i].optionString = Marshal.StringToHGlobalAnsi(options[i]); } fixed(JvmOption *a = &opt[0]) { args.options = a; } } IntPtr env; res = JvmDll.Instance.CreateJvm(out jvm, out env, &args); if (res != JniResult.Success) { throw new IgniteException("JNI_CreateJavaVM failed: " + res); } return(jvm); }
/// <summary> /// Creates the JVM. /// </summary> private static IntPtr CreateJvm(IList <string> options) { if (IsJava9()) { options = options == null ? Java9Options.ToList() : new List <string>(options.Concat(Java9Options)); } var args = new JvmInitArgs { version = JNI_VERSION_1_8, nOptions = options.Count }; var opts = GetJvmOptions(options); try { JniResult res; IntPtr jvm; fixed(JvmOption *optPtr = &opts[0]) { args.options = optPtr; IntPtr unused; res = JvmDll.Instance.CreateJvm(out jvm, out unused, &args); } if (res != JniResult.Success) { throw new IgniteException("JNI_CreateJavaVM failed: " + res); } return(jvm); } finally { foreach (var opt in opts) { Marshal.FreeHGlobal(opt.optionString); } } }