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