예제 #1
0
        /// <summary>
        /// Starts a new process.
        /// </summary>
        /// <param name="file">Executable name.</param>
        /// <param name="arg1">Argument.</param>
        /// <param name="arg2">Argument.</param>
        /// <param name="workDir">Work directory.</param>
        /// <param name="waitForOutput">A string to look for in the output.</param>
        public static unsafe void StartProcess(
            string file, string arg1, string arg2, string workDir, string waitForOutput)
        {
            Debug.Assert(file != null);
            Debug.Assert(arg1 != null);
            Debug.Assert(arg2 != null);
            Debug.Assert(workDir != null);

            var env = Jvm.Get().AttachCurrentThread();

            using (var cls = env.FindClass(ClassPlatformProcessUtils))
            {
                var methodId = env.GetStaticMethodId(cls, "startProcess",
                                                     "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");

                using (var fileRef = env.NewStringUtf(file))
                    using (var arg1Ref = env.NewStringUtf(arg1))
                        using (var arg2Ref = env.NewStringUtf(arg2))
                            using (var workDirRef = env.NewStringUtf(workDir))
                                using (var waitForOutputRef = env.NewStringUtf(waitForOutput))
                                {
                                    var methodArgs = stackalloc long[5];
                                    methodArgs[0] = fileRef.Target.ToInt64();
                                    methodArgs[1] = arg1Ref.Target.ToInt64();
                                    methodArgs[2] = arg2Ref.Target.ToInt64();
                                    methodArgs[3] = workDirRef.Target.ToInt64();
                                    methodArgs[4] = waitForOutputRef == null ? 0 : waitForOutputRef.Target.ToInt64();

                                    env.CallStaticVoidMethod(cls, methodId, methodArgs);
                                }
            }
        }
예제 #2
0
 /// <summary>
 /// Ensures that JVM is created.
 /// When corresponding test runs individually we have to start/stop Ignite node to create the JVM,
 /// otherwise it already exists.
 /// </summary>
 private static void EnsureJvmCreated()
 {
     if (Jvm.Get(ignoreMissing: true) == null)
     {
         Ignition.Start(TestUtils.GetTestConfiguration()).Dispose();
     }
 }
예제 #3
0
 /// <summary>
 /// Creates the JVM if necessary.
 /// </summary>
 public static void EnsureJvmCreated()
 {
     if (Jvm.Get(true) == null)
     {
         var logger = new TestContextLogger();
         JvmDll.Load(null, logger);
         IgniteManager.CreateJvm(GetTestConfiguration(), logger);
     }
 }
예제 #4
0
        /** */
        private static unsafe void CallVoidMethod(string className, string methodName, string methodSig)
        {
            var env = Jvm.Get().AttachCurrentThread();

            using (var cls = env.FindClass(className))
            {
                var methodId = env.GetStaticMethodId(cls, methodName, methodSig);
                env.CallStaticVoidMethod(cls, methodId);
            }
        }
예제 #5
0
        /** */
        private static unsafe string CallStringMethod(string className, string methodName, string methodSig)
        {
            var env = Jvm.Get().AttachCurrentThread();

            using (var cls = env.FindClass(className))
            {
                var methodId = env.GetStaticMethodId(cls, methodName, methodSig);
                var res      = env.CallStaticObjectMethod(cls, methodId);
                return(env.JStringToString(res.Target));
            }
        }
예제 #6
0
        internal static void Reallocate(long memPtr, int cap)
        {
            var jvm      = Jvm.Get();
            var methodId = jvm.MethodId;

            long *args = stackalloc long[4];

            args[0] = memPtr;
            args[1] = cap;

            jvm.AttachCurrentThread().CallStaticVoidMethod(methodId.PlatformUtils, methodId.PlatformUtilsReallocate,
                                                           args);
        }
예제 #7
0
        internal static bool IgnitionStop(string gridName, bool cancel)
        {
            var env      = Jvm.Get().AttachCurrentThread();
            var methodId = env.Jvm.MethodId;

            using (var gridName1 = env.NewStringUtf(gridName))
            {
                long *args = stackalloc long[2];
                args[0] = gridName == null ? 0 : gridName1.Target.ToInt64();
                args[1] = cancel ? 1 : 0;

                return(env.CallStaticBoolMethod(methodId.PlatformIgnition, methodId.PlatformIgnitionStop, args));
            }
        }
예제 #8
0
        /** */
        private static unsafe void CallStringMethod(string className, string methodName, string methodSig, string arg)
        {
            var env = Jvm.Get().AttachCurrentThread();

            using (var cls = env.FindClass(className))
            {
                var methodId = env.GetStaticMethodId(cls, methodName, methodSig);
                using (var gridNameRef = env.NewStringUtf(arg))
                {
                    var args = stackalloc long[1];
                    args[0] = gridNameRef.Target.ToInt64();

                    env.CallStaticVoidMethod(cls, methodId, args);
                }
            }
        }
예제 #9
0
        /// <summary>
        /// Create JVM.
        /// </summary>
        /// <returns>JVM.</returns>
        private static Jvm CreateJvm(IgniteConfiguration cfg, ILogger log)
        {
            // Do not bother with classpath when JVM exists.
            var jvm = Jvm.Get(true);

            if (jvm != null)
            {
                return(jvm);
            }

            var cp = Classpath.CreateClasspath(cfg, log: log);

            var jvmOpts = GetMergedJvmOptions(cfg);

            jvmOpts.Add(cp);

            return(Jvm.GetOrCreate(jvmOpts));
        }
예제 #10
0
        /// <summary>
        /// Create JVM.
        /// </summary>
        /// <returns>JVM.</returns>
        internal static Jvm CreateJvm(IgniteConfiguration cfg, ILogger log)
        {
            // Do not bother with classpath when JVM exists.
            var jvm = Jvm.Get(true);

            if (jvm != null)
            {
                return(jvm);
            }

            var igniteHome = IgniteHome.Resolve(cfg.IgniteHome, log);
            var cp         = Classpath.CreateClasspath(classPath: cfg.JvmClasspath, igniteHome: igniteHome, log: log);

            var jvmOpts = GetMergedJvmOptions(cfg, igniteHome);

            jvmOpts.Add(cp);

            return(Jvm.GetOrCreate(jvmOpts));
        }