http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs index 2cc3659..77f7e3d 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs @@ -23,7 +23,6 @@ namespace Apache.Ignite.Core.Impl.Unmanaged using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; - using System.Runtime.InteropServices; using System.Threading; using Apache.Ignite.Core.Cache.Affinity; using Apache.Ignite.Core.Cluster; @@ -44,6 +43,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged using Apache.Ignite.Core.Impl.Messaging; using Apache.Ignite.Core.Impl.Resource; using Apache.Ignite.Core.Impl.Services; + using Apache.Ignite.Core.Impl.Unmanaged.Jni; using Apache.Ignite.Core.Lifecycle; using Apache.Ignite.Core.Log; using Apache.Ignite.Core.Services; @@ -52,32 +52,26 @@ namespace Apache.Ignite.Core.Impl.Unmanaged /// <summary> /// Unmanaged callbacks. /// </summary> - [SuppressMessage("ReSharper", "UnusedMember.Local")] [SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", Justification = "This class instance usually lives as long as the app runs.")] [SuppressMessage("Microsoft.Design", "CA1049:TypesThatOwnNativeResourcesShouldBeDisposable", Justification = "This class instance usually lives as long as the app runs.")] - internal unsafe class UnmanagedCallbacks + internal unsafe class UnmanagedCallbacks : MarshalByRefObject { - /** Console write delegate. */ - private static readonly ConsoleWriteDelegate ConsoleWriteDel = ConsoleWrite; - - /** Console write pointer. */ - private static readonly void* ConsoleWritePtr = - Marshal.GetFunctionPointerForDelegate(ConsoleWriteDel).ToPointer(); - - /** Unmanaged context. */ - private volatile UnmanagedContext _ctx; + /** */ + private long _igniteId; /** Handle registry. */ private readonly HandleRegistry _handleRegistry = new HandleRegistry(); + /** JVM. */ + private readonly Jvm _jvm; + /** Grid. */ private volatile Ignite _ignite; - /** Keep references to created delegates. */ - // ReSharper disable once CollectionNeverQueried.Local - private readonly List<Delegate> _delegates = new List<Delegate>(5); + /** Log. */ + private volatile ILogger _log; /** Max op code. */ private static readonly int MaxOpCode = Enum.GetValues(typeof(UnmanagedCallbackOp)).Cast<int>().Max(); @@ -95,38 +89,9 @@ namespace Apache.Ignite.Core.Impl.Unmanaged /** Actions to be called upon Ignite initialization. */ private readonly List<Action<Ignite>> _initActions = new List<Action<Ignite>>(); - /** GC handle to UnmanagedCallbacks instance to prevent it from being GCed. */ - private readonly GCHandle _thisHnd; - - /** Callbacks pointer. */ - [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")] - private readonly IntPtr _cbsPtr; - - /** Log. */ - private readonly ILogger _log; - - /** Error type: generic. */ - private const int ErrGeneric = 1; - - /** Error type: initialize. */ - private const int ErrJvmInit = 2; - - /** Error type: attach. */ - private const int ErrJvmAttach = 3; - /** Operation: prepare .Net. */ private const int OpPrepareDotNet = 1; - private delegate void ErrorCallbackDelegate(void* target, int errType, sbyte* errClsChars, int errClsCharsLen, sbyte* errMsgChars, int errMsgCharsLen, sbyte* stackTraceChars, int stackTraceCharsLen, void* errData, int errDataLen); - - private delegate void LoggerLogDelegate(void* target, int level, sbyte* messageChars, int messageCharsLen, sbyte* categoryChars, int categoryCharsLen, sbyte* errorInfoChars, int errorInfoCharsLen, long memPtr); - private delegate bool LoggerIsLevelEnabledDelegate(void* target, int level); - - private delegate void ConsoleWriteDelegate(sbyte* chars, int charsLen, bool isErr); - - private delegate long InLongOutLongDelegate(void* target, int type, long val); - private delegate long InLongLongLongObjectOutLongDelegate(void* target, int type, long val1, long val2, long val3, void* arg); - private delegate long InLongOutLongFunc(long val); private delegate long InLongLongLongObjectOutLongFunc(long val1, long val2, long val3, void* arg); @@ -134,30 +99,14 @@ namespace Apache.Ignite.Core.Impl.Unmanaged /// Constructor. /// </summary> /// <param name="log">Logger.</param> - public UnmanagedCallbacks(ILogger log) + /// <param name="jvm"></param> + public UnmanagedCallbacks(ILogger log, Jvm jvm) { Debug.Assert(log != null); + Debug.Assert(jvm != null); _log = log; - - var cbs = new UnmanagedCallbackHandlers - { - target = IntPtr.Zero.ToPointer(), // Target is not used in .Net as we rely on dynamic FP creation. - - error = CreateFunctionPointer((ErrorCallbackDelegate)Error), - - loggerLog = CreateFunctionPointer((LoggerLogDelegate)LoggerLog), - loggerIsLevelEnabled = CreateFunctionPointer((LoggerIsLevelEnabledDelegate)LoggerIsLevelEnabled), - - inLongOutLong = CreateFunctionPointer((InLongOutLongDelegate)InLongOutLong), - inLongLongObjectOutLong = CreateFunctionPointer((InLongLongLongObjectOutLongDelegate)InLongLongLongObjectOutLong) - }; - - _cbsPtr = Marshal.AllocHGlobal(UU.HandlersSize()); - - Marshal.StructureToPtr(cbs, _cbsPtr, false); - - _thisHnd = GCHandle.Alloc(this); + _jvm = jvm; InitHandlers(); } @@ -170,6 +119,22 @@ namespace Apache.Ignite.Core.Impl.Unmanaged get { return _handleRegistry; } } + /// <summary> + /// Gets the ignite identifier. + /// </summary> + public long IgniteId + { + get { return _igniteId; } + } + + /// <summary> + /// Gets the JVM. + /// </summary> + public Jvm Jvm + { + get { return _jvm; } + } + #region HANDLERS /// <summary> @@ -266,7 +231,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged #region IMPLEMENTATION: GENERAL PURPOSE [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - private long InLongOutLong(void* target, int type, long val) + internal long InLongOutLong(int type, long val) { try { @@ -286,15 +251,12 @@ namespace Apache.Ignite.Core.Impl.Unmanaged catch (Exception e) { _log.Error(e, "Failure in Java callback"); - - UU.ThrowToJava(_ctx.NativeContext, e); - - return 0; + throw; } } [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - private long InLongLongLongObjectOutLong(void* target, int type, long val1, long val2, long val3, void* arg) + internal long InLongLongLongObjectOutLong(int type, long val1, long val2, long val3, IntPtr arg) { try { @@ -309,15 +271,12 @@ namespace Apache.Ignite.Core.Impl.Unmanaged if (!hnd.AllowUninitialized) _initEvent.Wait(); - return hnd.Handler(val1, val2, val3, arg); + return hnd.Handler(val1, val2, val3, arg.ToPointer()); } catch (Exception e) { _log.Error(e, "Failure in Java callback"); - - UU.ThrowToJava(_ctx.NativeContext, e); - - return 0; + throw; } } @@ -680,8 +639,8 @@ namespace Apache.Ignite.Core.Impl.Unmanaged if (receiver != null) { - var target = new PlatformJniTarget(new UnmanagedNonReleaseableTarget(_ctx, cache), - _ignite.Marshaller); + var cacheRef = _jvm.AttachCurrentThread().NewGlobalRef((IntPtr) cache); + var target = new PlatformJniTarget(cacheRef, _ignite.Marshaller); receiver.Receive(_ignite, target, stream, keepBinary); } @@ -1069,7 +1028,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged private long OnStart(long memPtr, long unused, long unused1, void* proc) { - var proc0 = UU.Acquire(_ctx, proc); + var proc0 = _jvm.AttachCurrentThread().NewGlobalRef((IntPtr) proc); using (var stream = IgniteManager.Memory.Get(memPtr).GetStream()) { @@ -1081,14 +1040,6 @@ namespace Apache.Ignite.Core.Impl.Unmanaged private long OnStop(long unused) { - Marshal.FreeHGlobal(_cbsPtr); - - // ReSharper disable once ImpureMethodCallOnReadonlyValueField - _thisHnd.Free(); - - // Allow context to be collected, which will cause resource cleanup in finalizer. - _ctx = null; - // Notify grid var ignite = _ignite; @@ -1098,34 +1049,6 @@ namespace Apache.Ignite.Core.Impl.Unmanaged return 0; } - private void Error(void* target, int errType, sbyte* errClsChars, int errClsCharsLen, sbyte* errMsgChars, - int errMsgCharsLen, sbyte* stackTraceChars, int stackTraceCharsLen, void* errData, int errDataLen) - { - // errData mechanism is only needed for CachePartialUpdateException and is no longer used, - // since CacheImpl handles all errors itself. - Debug.Assert(errDataLen == 0); - Debug.Assert(errData == null); - - string errCls = IgniteUtils.Utf8UnmanagedToString(errClsChars, errClsCharsLen); - string errMsg = IgniteUtils.Utf8UnmanagedToString(errMsgChars, errMsgCharsLen); - string stackTrace = IgniteUtils.Utf8UnmanagedToString(stackTraceChars, stackTraceCharsLen); - - switch (errType) - { - case ErrGeneric: - throw ExceptionUtils.GetException(_ignite, errCls, errMsg, stackTrace); - - case ErrJvmInit: - throw ExceptionUtils.GetJvmInitializeException(errCls, errMsg, stackTrace); - - case ErrJvmAttach: - throw new IgniteException("Failed to attach to JVM."); - - default: - throw new IgniteException("Unknown exception [cls=" + errCls + ", msg=" + errMsg + ']'); - } - } - private long OnClientDisconnected(long unused) { _ignite.OnClientDisconnected(); @@ -1140,18 +1063,13 @@ namespace Apache.Ignite.Core.Impl.Unmanaged return 0; } - private void LoggerLog(void* target, int level, sbyte* messageChars, int messageCharsLen, sbyte* categoryChars, - int categoryCharsLen, sbyte* errorInfoChars, int errorInfoCharsLen, long memPtr) + internal void LoggerLog(int level, string message, string category, string nativeError, long memPtr) { // When custom logger in .NET is not defined, Java should not call us. Debug.Assert(!(_log is JavaLogger)); SafeCall(() => { - var message = IgniteUtils.Utf8UnmanagedToString(messageChars, messageCharsLen); - var category = IgniteUtils.Utf8UnmanagedToString(categoryChars, categoryCharsLen); - var nativeError = IgniteUtils.Utf8UnmanagedToString(errorInfoChars, errorInfoCharsLen); - Exception ex = null; if (memPtr != 0 && _ignite != null) @@ -1166,7 +1084,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged }, true); } - private bool LoggerIsLevelEnabled(void* target, int level) + internal bool LoggerIsLevelEnabled(int level) { // When custom logger in .NET is not defined, Java should not call us. Debug.Assert(!(_log is JavaLogger)); @@ -1174,24 +1092,6 @@ namespace Apache.Ignite.Core.Impl.Unmanaged return SafeCall(() => _log.IsEnabled((LogLevel) level), true); } - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - private static void ConsoleWrite(sbyte* chars, int charsLen, bool isErr) - { - try - { - var str = IgniteUtils.Utf8UnmanagedToString(chars, charsLen); - - var target = isErr ? Console.Error : Console.Out; - - target.Write(str); - - } - catch (Exception ex) - { - Console.Error.WriteLine("ConsoleWrite unmanaged callback failed: " + ex); - } - } - private long PluginProcessorIgniteStop(long val) { _ignite.PluginProcessor.OnIgniteStop(val != 0); @@ -1225,7 +1125,8 @@ namespace Apache.Ignite.Core.Impl.Unmanaged if (affBase != null) { - var baseFunc0 = new PlatformJniTarget(UU.Acquire(_ctx, baseFunc), _ignite.Marshaller); + var baseFuncRef = _jvm.AttachCurrentThread().NewGlobalRef((IntPtr) baseFunc); + var baseFunc0 = new PlatformJniTarget(baseFuncRef, _ignite.Marshaller); affBase.SetBaseFunction(new PlatformAffinityFunction(baseFunc0)); } @@ -1312,8 +1213,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged catch (Exception e) { _log.Error(e, "Failure in Java callback"); - - UU.ThrowToJava(_ctx.NativeContext, e); + throw; } } @@ -1330,32 +1230,13 @@ namespace Apache.Ignite.Core.Impl.Unmanaged catch (Exception e) { _log.Error(e, "Failure in Java callback"); - - UU.ThrowToJava(_ctx.NativeContext, e); - - return default(T); + throw; } } #endregion /// <summary> - /// Callbacks pointer. - /// </summary> - public void* CallbacksPointer - { - get { return _cbsPtr.ToPointer(); } - } - - /// <summary> - /// Gets the context. - /// </summary> - public UnmanagedContext Context - { - get { return _ctx; } - } - - /// <summary> /// Gets the log. /// </summary> public ILogger Log @@ -1364,22 +1245,11 @@ namespace Apache.Ignite.Core.Impl.Unmanaged } /// <summary> - /// Create function pointer for the given function. + /// Sets the context. /// </summary> - private void* CreateFunctionPointer(Delegate del) - { - _delegates.Add(del); // Prevent delegate from being GC-ed. - - return Marshal.GetFunctionPointerForDelegate(del).ToPointer(); - } - - /// <param name="context">Context.</param> - public void SetContext(void* context) + public void SetContext(long igniteId) { - Debug.Assert(context != null); - Debug.Assert(_ctx == null); - - _ctx = new UnmanagedContext(context); + _igniteId = igniteId; } /// <summary> @@ -1409,17 +1279,15 @@ namespace Apache.Ignite.Core.Impl.Unmanaged /// </summary> public void Cleanup() { + // This instance crosses AppDomain boundaries and is GCed with a delay. + // Release all external references. + _ignite = null; + _log = null; - _handleRegistry.Close(); - } + _jvm.ReleaseCallbacks(_igniteId); - /// <summary> - /// Gets the console write handler. - /// </summary> - public static void* ConsoleWriteHandler - { - get { return ConsoleWritePtr; } + _handleRegistry.Close(); } /// <summary>
http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedContext.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedContext.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedContext.cs deleted file mode 100644 index 89d2071..0000000 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedContext.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl.Unmanaged -{ - /// <summary> - /// Unmanaged context. - /// Wrapper around native ctx pointer to track finalization. - /// </summary> - internal unsafe class UnmanagedContext - { - /** Context */ - private readonly void* _nativeCtx; - - /// <summary> - /// Constructor. - /// </summary> - public UnmanagedContext(void* ctx) - { - _nativeCtx = ctx; - } - - /// <summary> - /// Gets the native context pointer. - /// </summary> - public void* NativeContext - { - get { return _nativeCtx; } - } - - /// <summary> - /// Destructor. - /// </summary> - ~UnmanagedContext() - { - UnmanagedUtils.DeleteContext(_nativeCtx); // Release CPP object. - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedNonReleaseableTarget.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedNonReleaseableTarget.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedNonReleaseableTarget.cs deleted file mode 100644 index d044c5f..0000000 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedNonReleaseableTarget.cs +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl.Unmanaged -{ - using System.Diagnostics.CodeAnalysis; - - /// <summary> - /// Unmanaged target which does not require explicit release. - /// </summary> - internal unsafe class UnmanagedNonReleaseableTarget : IUnmanagedTarget - { - /** Context. */ - private readonly UnmanagedContext _ctx; - - /** Target. */ - private readonly void* _target; - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="ctx">Context.</param> - /// <param name="target">Target.</param> - public UnmanagedNonReleaseableTarget(UnmanagedContext ctx, void* target) - { - _ctx = ctx; - _target = target; - } - - /** <inheritdoc /> */ - public void* Context - { - get { return _ctx.NativeContext; } - } - - /** <inheritdoc /> */ - public void* Target - { - get { return _target; } - } - - /** <inheritdoc /> */ - public IUnmanagedTarget ChangeTarget(void* target) - { - return new UnmanagedTarget(_ctx, target); - } - - /** <inheritdoc /> */ - [SuppressMessage("Microsoft.Usage", "CA1816:CallGCSuppressFinalizeCorrectly", - Justification = "There is no finalizer.")] - public void Dispose() - { - // No-op. - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedTarget.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedTarget.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedTarget.cs deleted file mode 100644 index a5e2cb0..0000000 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedTarget.cs +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl.Unmanaged -{ - using System; - using System.Runtime.InteropServices; - using UU = UnmanagedUtils; - - /// <summary> - /// Base unmanaged target implementation. - /// </summary> - internal sealed unsafe class UnmanagedTarget : CriticalHandle, IUnmanagedTarget - { - /** Context. */ - private readonly UnmanagedContext _ctx; - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="ctx">Context.</param> - /// <param name="target">Target.</param> - public UnmanagedTarget(UnmanagedContext ctx, void* target) - : base(IntPtr.Zero) - { - _ctx = ctx; - - SetHandle(new IntPtr(target)); - } - - /** <inheritdoc /> */ - public void* Context - { - get { return _ctx.NativeContext; } - } - - /** <inheritdoc /> */ - public void* Target - { - get { return handle.ToPointer(); } - } - - /** <inheritdoc /> */ - public IUnmanagedTarget ChangeTarget(void* target) - { - return new UnmanagedTarget(_ctx, target); - } - - /** <inheritdoc /> */ - protected override bool ReleaseHandle() - { - UU.Release(this); - - return true; - } - - /** <inheritdoc /> */ - public override bool IsInvalid - { - get { return handle == IntPtr.Zero; } - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs index 511bb7a..58586a9 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs @@ -17,13 +17,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged { - using System; - using System.Diagnostics; - using System.Diagnostics.CodeAnalysis; - using System.Runtime.InteropServices; - using System.Threading.Tasks; - using Apache.Ignite.Core.Common; - using JNI = IgniteJniNativeMethods; + using Apache.Ignite.Core.Impl.Unmanaged.Jni; /// <summary> /// Unmanaged utility classes. @@ -33,93 +27,47 @@ namespace Apache.Ignite.Core.Impl.Unmanaged /** Interop factory ID for .Net. */ private const int InteropFactoryId = 1; - /// <summary> - /// Initializer. - /// </summary> - [SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - static UnmanagedUtils() - { - var platform = Environment.Is64BitProcess ? "x64" : "x86"; - - var resName = string.Format("{0}.{1}", platform, IgniteUtils.FileIgniteJniDll); - - var path = IgniteUtils.UnpackEmbeddedResource(resName, IgniteUtils.FileIgniteJniDll); - - var ptr = NativeMethods.LoadLibrary(path); - - if (ptr == IntPtr.Zero) - { - var err = Marshal.GetLastWin32Error(); - - throw new IgniteException(string.Format("Failed to load {0} from {1}: [{2}]", - IgniteUtils.FileIgniteJniDll, path, IgniteUtils.FormatWin32Error(err))); - } - - AppDomain.CurrentDomain.DomainUnload += CurrentDomain_DomainUnload; - - JNI.SetConsoleHandler(UnmanagedCallbacks.ConsoleWriteHandler); - - // Clean directories in background to avoid extra work on start. - Task.Factory.StartNew(IgniteUtils.TryCleanTempDirectories); - } - - /// <summary> - /// Handles the DomainUnload event of the current AppDomain. - /// </summary> - private static void CurrentDomain_DomainUnload(object sender, EventArgs e) - { - // Clean the handler to avoid JVM crash. - var removedCnt = JNI.RemoveConsoleHandler(UnmanagedCallbacks.ConsoleWriteHandler); - - Debug.Assert(removedCnt == 1); - } - - /// <summary> - /// No-op initializer used to force type loading and static constructor call. - /// </summary> - internal static void Initialize() - { - // No-op. - } - #region NATIVE METHODS: PROCESSOR - internal static void IgnitionStart(UnmanagedContext ctx, string cfgPath, string gridName, - bool clientMode, bool userLogger) + internal static void IgnitionStart(Env env, string cfgPath, string gridName, + bool clientMode, bool userLogger, long igniteId) { using (var mem = IgniteManager.Memory.Allocate().GetStream()) + using (var cfgPath0 = env.NewStringUtf(cfgPath)) + using (var gridName0 = env.NewStringUtf(gridName)) { mem.WriteBool(clientMode); mem.WriteBool(userLogger); - sbyte* cfgPath0 = IgniteUtils.StringToUtf8Unmanaged(cfgPath); - sbyte* gridName0 = IgniteUtils.StringToUtf8Unmanaged(gridName); - - try - { - // OnStart receives InteropProcessor referece and stores it. - JNI.IgnitionStart(ctx.NativeContext, cfgPath0, gridName0, InteropFactoryId, - mem.SynchronizeOutput()); - } - finally - { - Marshal.FreeHGlobal(new IntPtr(cfgPath0)); - Marshal.FreeHGlobal(new IntPtr(gridName0)); - } + // Additional data. + mem.WriteBool(false); + mem.WriteBool(false); + + long* args = stackalloc long[5]; + args[0] = cfgPath == null ? 0 : cfgPath0.Target.ToInt64(); + args[1] = gridName == null ? 0 : gridName0.Target.ToInt64(); + args[2] = InteropFactoryId; + args[3] = igniteId; + args[4] = mem.SynchronizeOutput(); + + // OnStart receives InteropProcessor reference and stores it. + var methodId = env.Jvm.MethodId; + env.CallStaticVoidMethod(methodId.PlatformIgnition, methodId.PlatformIgnitionStart, args); } } - internal static bool IgnitionStop(void* ctx, string gridName, bool cancel) + internal static bool IgnitionStop(string gridName, bool cancel) { - sbyte* gridName0 = IgniteUtils.StringToUtf8Unmanaged(gridName); + var env = Jvm.Get().AttachCurrentThread(); + var methodId = env.Jvm.MethodId; - try + using (var gridName1 = env.NewStringUtf(gridName)) { - return JNI.IgnitionStop(ctx, gridName0, cancel); - } - finally - { - Marshal.FreeHGlobal(new IntPtr(gridName0)); + 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); } } @@ -127,122 +75,127 @@ namespace Apache.Ignite.Core.Impl.Unmanaged #region NATIVE METHODS: TARGET - internal static long TargetInLongOutLong(IUnmanagedTarget target, int opType, long memPtr) + internal static long TargetInLongOutLong(GlobalRef target, int opType, long memPtr) { - return JNI.TargetInLongOutLong(target.Context, target.Target, opType, memPtr); - } + var jvm = target.Jvm; - internal static long TargetInStreamOutLong(IUnmanagedTarget target, int opType, long memPtr) - { - return JNI.TargetInStreamOutLong(target.Context, target.Target, opType, memPtr); - } + long* args = stackalloc long[2]; + args[0] = opType; + args[1] = memPtr; - internal static void TargetInStreamOutStream(IUnmanagedTarget target, int opType, long inMemPtr, long outMemPtr) - { - JNI.TargetInStreamOutStream(target.Context, target.Target, opType, inMemPtr, outMemPtr); + return jvm.AttachCurrentThread().CallLongMethod(target, jvm.MethodId.TargetInLongOutLong, args); } - internal static IUnmanagedTarget TargetInStreamOutObject(IUnmanagedTarget target, int opType, long inMemPtr) + internal static long TargetInStreamOutLong(GlobalRef target, int opType, long memPtr) { - void* res = JNI.TargetInStreamOutObject(target.Context, target.Target, opType, inMemPtr); + var jvm = target.Jvm; - if (res == null) - return null; + long* args = stackalloc long[2]; + args[0] = opType; + args[1] = memPtr; - return target.ChangeTarget(res); + return jvm.AttachCurrentThread().CallLongMethod(target, jvm.MethodId.TargetInStreamOutLong, args); } - internal static IUnmanagedTarget TargetInObjectStreamOutObjectStream(IUnmanagedTarget target, int opType, void* arg, long inMemPtr, long outMemPtr) + internal static void TargetInStreamOutStream(GlobalRef target, int opType, long inMemPtr, + long outMemPtr) { - void* res = JNI.TargetInObjectStreamOutObjectStream(target.Context, target.Target, opType, arg, inMemPtr, outMemPtr); + var jvm = target.Jvm; - if (res == null) - return null; + long* args = stackalloc long[3]; + args[0] = opType; + args[1] = inMemPtr; + args[2] = outMemPtr; - return target.ChangeTarget(res); + jvm.AttachCurrentThread().CallVoidMethod(target, jvm.MethodId.TargetInStreamOutStream, args); } - internal static void TargetOutStream(IUnmanagedTarget target, int opType, long memPtr) + internal static GlobalRef TargetInStreamOutObject(GlobalRef target, int opType, long inMemPtr) { - JNI.TargetOutStream(target.Context, target.Target, opType, memPtr); - } + var jvm = target.Jvm; - internal static IUnmanagedTarget TargetOutObject(IUnmanagedTarget target, int opType) - { - void* res = JNI.TargetOutObject(target.Context, target.Target, opType); + long* args = stackalloc long[2]; + args[0] = opType; + args[1] = inMemPtr; - return target.ChangeTarget(res); + return jvm.AttachCurrentThread().CallObjectMethod( + target, jvm.MethodId.TargetInStreamOutObject, args); } - internal static void TargetInStreamAsync(IUnmanagedTarget target, int opType, long memPtr) + internal static GlobalRef TargetInObjectStreamOutObjectStream(GlobalRef target, int opType, + GlobalRef arg, long inMemPtr, long outMemPtr) { - JNI.TargetInStreamAsync(target.Context, target.Target, opType, memPtr); - } + var jvm = target.Jvm; - internal static IUnmanagedTarget TargetInStreamOutObjectAsync(IUnmanagedTarget target, int opType, long memPtr) - { - void* res = JNI.TargetInStreamOutObjectAsync(target.Context, target.Target, opType, memPtr); + long* args = stackalloc long[4]; + args[0] = opType; + args[1] = (long) arg.Target; + args[2] = inMemPtr; + args[3] = outMemPtr; - return target.ChangeTarget(res); + return jvm.AttachCurrentThread().CallObjectMethod( + target, jvm.MethodId.TargetInObjectStreamOutObjectStream, args); } - #endregion - - #region NATIVE METHODS: MISCELANNEOUS - - internal static void Reallocate(long memPtr, int cap) + internal static void TargetOutStream(GlobalRef target, int opType, long memPtr) { - int res = JNI.Reallocate(memPtr, cap); + var jvm = target.Jvm; - if (res != 0) - throw new IgniteException("Failed to reallocate external memory [ptr=" + memPtr + - ", capacity=" + cap + ']'); + long* args = stackalloc long[4]; + args[0] = opType; + args[1] = memPtr; + + jvm.AttachCurrentThread().CallVoidMethod(target, jvm.MethodId.TargetOutStream, args); } - internal static IUnmanagedTarget Acquire(UnmanagedContext ctx, void* target) + internal static GlobalRef TargetOutObject(GlobalRef target, int opType) { - void* target0 = JNI.Acquire(ctx.NativeContext, target); + var jvm = target.Jvm; - return new UnmanagedTarget(ctx, target0); - } + long opType0 = opType; - internal static void Release(IUnmanagedTarget target) - { - JNI.Release(target.Target); + return jvm.AttachCurrentThread().CallObjectMethod( + target, jvm.MethodId.TargetOutObject, &opType0); } - internal static void ThrowToJava(void* ctx, Exception e) + internal static void TargetInStreamAsync(GlobalRef target, int opType, long memPtr) { - char* msgChars = (char*)IgniteUtils.StringToUtf8Unmanaged(e.Message); + var jvm = target.Jvm; - try - { - JNI.ThrowToJava(ctx, msgChars); - } - finally - { - Marshal.FreeHGlobal(new IntPtr(msgChars)); - } - } + long* args = stackalloc long[4]; + args[0] = opType; + args[1] = memPtr; - internal static int HandlersSize() - { - return JNI.HandlersSize(); + jvm.AttachCurrentThread().CallVoidMethod(target, jvm.MethodId.TargetInStreamAsync, args); } - internal static void* CreateContext(void* opts, int optsLen, void* cbs) + internal static GlobalRef TargetInStreamOutObjectAsync(GlobalRef target, int opType, long memPtr) { - return JNI.CreateContext(opts, optsLen, cbs); - } + var jvm = target.Jvm; - internal static void DeleteContext(void* ctx) - { - JNI.DeleteContext(ctx); + long* args = stackalloc long[4]; + args[0] = opType; + args[1] = memPtr; + + return jvm.AttachCurrentThread().CallObjectMethod( + target, jvm.MethodId.TargetInStreamOutObjectAsync, args); } - internal static void DestroyJvm(void* ctx) + #endregion + + #region NATIVE METHODS: MISCELANNEOUS + + internal static void Reallocate(long memPtr, int cap) { - JNI.DestroyJvm(ctx); + 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); } #endregion http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.Core/build-common.ps1 ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/build-common.ps1 b/modules/platforms/dotnet/Apache.Ignite.Core/build-common.ps1 deleted file mode 100644 index db24751..0000000 --- a/modules/platforms/dotnet/Apache.Ignite.Core/build-common.ps1 +++ /dev/null @@ -1,77 +0,0 @@ -param([string]$configuration="Debug", [string]$msbuildexe = "MSBuild.exe") - -$x64 = [System.Environment]::Is64BitOperatingSystem -$jdkRegKey = 'Software\JavaSoft\Java Development Kit' - -# Fisrt, check if JAVA_HOME env vars are set -if (Test-Path Env:\JAVA_HOME) { - if ($x64 -and !$env:JAVA_HOME64) { - $env:JAVA_HOME64 = $env:JAVA_HOME - } - elseif (!$env:JAVA_HOME32) { - $env:JAVA_HOME32 = $env:JAVA_HOME - } -} - -# Next, check registry -Function GetJavaHome([string]$path, [Microsoft.Win32.RegistryView] $mode) { - $key = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $mode).OpenSubKey($path) - - if ($key -eq $null) { - return $null - } - - $subKeys = $key.GetSubKeyNames() - $curVer = $key.GetValue("CurrentVersion") - - if ($subKeys.Length -eq 0) { - return $null - } - - if ($curVer -eq $null -or !$subKeys.Contains($curVer)) { - $curVer = $subKeys[0] - } - - return $key.OpenSubKey($curVer).GetValue("JavaHome") -} - -# do not read registry if env vars are already set -if (!$env:JAVA_HOME32) { - $env:JAVA_HOME32 = GetJavaHome $jdkRegKey Registry32 -} - - -if ($x64 -and !$env:JAVA_HOME64) { - $env:JAVA_HOME64 = GetJavaHome $jdkRegKey Registry64 -} - -echo "JAVA_HOME64: $env:JAVA_HOME64" -echo "JAVA_HOME32: $env:JAVA_HOME32" -echo "msbuildexe: $msbuildexe" -echo "x64: $x64" - -# build common project -if ($env:JAVA_HOME64) { - $env:JAVA_HOME = $env:JAVA_HOME64 - - & $msbuildexe "..\..\cpp\common\project\vs\common.vcxproj" /p:Platform=x64 /p:Configuration=$Configuration /t:Rebuild -} - -if ($env:JAVA_HOME32) { - $env:JAVA_HOME = $env:JAVA_HOME32 - - & $msbuildexe "..\..\cpp\common\project\vs\common.vcxproj" /p:Platform=Win32 /p:Configuration=$Configuration /t:Rebuild -} - -# build jni project -if ($env:JAVA_HOME64) { - $env:JAVA_HOME = $env:JAVA_HOME64 - - & $msbuildexe "..\..\cpp\jni\project\vs\jni.vcxproj" /p:Platform=x64 /p:Configuration=$Configuration /t:Rebuild -} - -if ($env:JAVA_HOME32) { - $env:JAVA_HOME = $env:JAVA_HOME32 - - & $msbuildexe "..\..\cpp\jni\project\vs\jni.vcxproj" /p:Platform=Win32 /p:Configuration=$Configuration /t:Rebuild -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.EntityFramework/Apache.Ignite.EntityFramework.csproj ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.EntityFramework/Apache.Ignite.EntityFramework.csproj b/modules/platforms/dotnet/Apache.Ignite.EntityFramework/Apache.Ignite.EntityFramework.csproj index 372c2ed..4b302cc 100644 --- a/modules/platforms/dotnet/Apache.Ignite.EntityFramework/Apache.Ignite.EntityFramework.csproj +++ b/modules/platforms/dotnet/Apache.Ignite.EntityFramework/Apache.Ignite.EntityFramework.csproj @@ -20,7 +20,7 @@ <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> - <RunCodeAnalysis>true</RunCodeAnalysis> + <RunCodeAnalysis>false</RunCodeAnalysis> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> <DocumentationFile>bin\Debug\Apache.Ignite.EntityFramework.XML</DocumentationFile> @@ -35,6 +35,7 @@ <DebugType>none</DebugType> <DocumentationFile>bin\Release\Apache.Ignite.EntityFramework.XML</DocumentationFile> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> + <RunCodeAnalysis>false</RunCodeAnalysis> </PropertyGroup> <PropertyGroup> <SignAssembly>true</SignAssembly> http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj index 142ce73..af87404 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj +++ b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj @@ -20,7 +20,7 @@ <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> - <RunCodeAnalysis>true</RunCodeAnalysis> + <RunCodeAnalysis>false</RunCodeAnalysis> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> </PropertyGroup> @@ -32,6 +32,8 @@ <WarningLevel>4</WarningLevel> <DocumentationFile>bin\Release\Apache.Ignite.Log4Net.XML</DocumentationFile> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> + <RunCodeAnalysis>false</RunCodeAnalysis> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> </PropertyGroup> <PropertyGroup> <SignAssembly>true</SignAssembly> http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.ndproj ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.ndproj b/modules/platforms/dotnet/Apache.Ignite.ndproj index 9f5287b..34aaa4c 100644 --- a/modules/platforms/dotnet/Apache.Ignite.ndproj +++ b/modules/platforms/dotnet/Apache.Ignite.ndproj @@ -2347,7 +2347,8 @@ warnif count > 0 from t in JustMyCode.Types.Where(t => !t.IsStatic && !t.IsInterface && !t.IsEnumeration && !t.IsDelegate && - !t.IsGeneratedByCompiler) + !t.IsGeneratedByCompiler && + !t.FullName.Contains(".Jni.")) let methodsThatCanBeMadeStatic = from m in t.InstanceMethods @@ -2477,7 +2478,7 @@ select new { <Query Active="True" DisplayList="True" DisplayStat="False" DisplaySelectionView="False" IsCriticalRule="False"><![CDATA[//<Name>Avoid the Singleton pattern</Name> warnif count > 0 from t in Application.Types -where !t.IsStatic && !t.IsAbstract && (t.IsClass || t.IsStructure) +where !t.IsStatic && !t.IsAbstract && (t.IsClass || t.IsStructure) && t.Name != "Jvm" // All ctors of a singleton are private where t.Constructors.Where(ctor => !ctor.IsPrivate).Count() == 0 @@ -5641,7 +5642,8 @@ from f in JustMyCode.Fields where !f.IsEnumValue && // The IL code never explicitly uses enumeration value. f.Name != "value__" && // Field named 'value__' are relative to enumerations and the IL code never explicitly uses them. !f.HasAttribute("NDepend.Attributes.IsNotDeadCodeAttribute".AllowNoMatch()) && - !f.IsGeneratedByCompiler + !f.IsGeneratedByCompiler && + !f.ParentType.Name.StartsWith("Jvm") // If you don't want to link NDepend.API.dll, you can use your own IsNotDeadCodeAttribute // and adapt the source code of this rule. select new { http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite.sln ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.sln b/modules/platforms/dotnet/Apache.Ignite.sln index fe83ccd..1ca7b14 100644 --- a/modules/platforms/dotnet/Apache.Ignite.sln +++ b/modules/platforms/dotnet/Apache.Ignite.sln @@ -2,14 +2,9 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core", "Apache.Ignite.Core\Apache.Ignite.Core.csproj", "{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}" - ProjectSection(ProjectDependencies) = postProject - {4F7E4917-4612-4B96-9838-025711ADE391} = {4F7E4917-4612-4B96-9838-025711ADE391} - EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core.Tests", "Apache.Ignite.Core.Tests\Apache.Ignite.Core.Tests.csproj", "{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\cpp\common\project\vs\common.vcxproj", "{B63F2E01-5157-4719-8491-0E1C7CD3B701}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core.Tests.TestDll", "Apache.Ignite.Core.Tests.TestDll\Apache.Ignite.Core.Tests.TestDll.csproj", "{F4A69E2D-908E-4F0F-A794-84D508D60E5F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite", "Apache.Ignite\Apache.Ignite.csproj", "{27F7F3C6-BDDE-43A9-B565-856F8395A04B}" @@ -40,8 +35,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution README.md = README.md EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jni", "..\cpp\jni\project\vs\jni.vcxproj", "{4F7E4917-4612-4B96-9838-025711ADE391}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Linq", "Apache.Ignite.Linq\Apache.Ignite.Linq.csproj", "{5B571661-17F4-4F29-8C7D-0EDB38CA9B55}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet", "Apache.Ignite.AspNet\Apache.Ignite.AspNet.csproj", "{13EA96FC-CC83-4164-A7C0-4F30ED797460}" @@ -59,201 +52,65 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x64.ActiveCfg = Debug|x64 - {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x64.Build.0 = Debug|x64 - {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x86.ActiveCfg = Debug|x86 - {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x86.Build.0 = Debug|x86 {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|Any CPU.ActiveCfg = Release|Any CPU {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|Any CPU.Build.0 = Release|Any CPU - {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x64.ActiveCfg = Release|x64 - {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x64.Build.0 = Release|x64 - {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x86.ActiveCfg = Release|x86 - {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x86.Build.0 = Release|x86 {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x64.ActiveCfg = Debug|Any CPU - {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x64.Build.0 = Debug|Any CPU - {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x86.ActiveCfg = Debug|Any CPU - {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x86.Build.0 = Debug|Any CPU {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|Any CPU.ActiveCfg = Release|Any CPU {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|Any CPU.Build.0 = Release|Any CPU - {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x64.ActiveCfg = Release|Any CPU - {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x64.Build.0 = Release|Any CPU - {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x86.ActiveCfg = Release|Any CPU - {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x86.Build.0 = Release|Any CPU - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Debug|Any CPU.ActiveCfg = Debug|x64 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Debug|x64.ActiveCfg = Debug|x64 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Debug|x64.Build.0 = Debug|x64 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Debug|x86.ActiveCfg = Debug|Win32 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Debug|x86.Build.0 = Debug|Win32 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Release|Any CPU.ActiveCfg = Release|x64 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Release|x64.ActiveCfg = Release|x64 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Release|x64.Build.0 = Release|x64 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Release|x86.ActiveCfg = Release|Win32 - {B63F2E01-5157-4719-8491-0E1C7CD3B701}.Release|x86.Build.0 = Release|Win32 {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x64.ActiveCfg = Debug|Any CPU - {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x64.Build.0 = Debug|Any CPU - {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x86.ActiveCfg = Debug|Any CPU - {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x86.Build.0 = Debug|Any CPU {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|Any CPU.ActiveCfg = Release|Any CPU {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|Any CPU.Build.0 = Release|Any CPU - {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x64.ActiveCfg = Release|Any CPU - {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x64.Build.0 = Release|Any CPU - {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x86.ActiveCfg = Release|Any CPU - {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x86.Build.0 = Release|Any CPU {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.ActiveCfg = Debug|Any CPU - {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.Build.0 = Debug|Any CPU - {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.ActiveCfg = Debug|Any CPU - {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.Build.0 = Debug|Any CPU {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|Any CPU.ActiveCfg = Release|Any CPU {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|Any CPU.Build.0 = Release|Any CPU - {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.ActiveCfg = Release|Any CPU - {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.Build.0 = Release|Any CPU - {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.ActiveCfg = Release|Any CPU - {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.Build.0 = Release|Any CPU {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|Any CPU.Build.0 = Debug|Any CPU - {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x64.ActiveCfg = Debug|Any CPU - {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x64.Build.0 = Debug|Any CPU - {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x86.ActiveCfg = Debug|Any CPU - {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x86.Build.0 = Debug|Any CPU {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|Any CPU.ActiveCfg = Release|Any CPU {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|Any CPU.Build.0 = Release|Any CPU - {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x64.ActiveCfg = Release|Any CPU - {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x64.Build.0 = Release|Any CPU - {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x86.ActiveCfg = Release|Any CPU - {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x86.Build.0 = Release|Any CPU {DFB08363-202E-412D-8812-349EF10A8702}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DFB08363-202E-412D-8812-349EF10A8702}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DFB08363-202E-412D-8812-349EF10A8702}.Debug|x64.ActiveCfg = Debug|Any CPU - {DFB08363-202E-412D-8812-349EF10A8702}.Debug|x64.Build.0 = Debug|Any CPU - {DFB08363-202E-412D-8812-349EF10A8702}.Debug|x86.ActiveCfg = Debug|Any CPU - {DFB08363-202E-412D-8812-349EF10A8702}.Debug|x86.Build.0 = Debug|Any CPU {DFB08363-202E-412D-8812-349EF10A8702}.Release|Any CPU.ActiveCfg = Release|Any CPU {DFB08363-202E-412D-8812-349EF10A8702}.Release|Any CPU.Build.0 = Release|Any CPU - {DFB08363-202E-412D-8812-349EF10A8702}.Release|x64.ActiveCfg = Release|Any CPU - {DFB08363-202E-412D-8812-349EF10A8702}.Release|x64.Build.0 = Release|Any CPU - {DFB08363-202E-412D-8812-349EF10A8702}.Release|x86.ActiveCfg = Release|Any CPU - {DFB08363-202E-412D-8812-349EF10A8702}.Release|x86.Build.0 = Release|Any CPU {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Debug|x64.ActiveCfg = Debug|Any CPU - {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Debug|x64.Build.0 = Debug|Any CPU - {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Debug|x86.ActiveCfg = Debug|Any CPU - {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Debug|x86.Build.0 = Debug|Any CPU {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Release|Any CPU.ActiveCfg = Release|Any CPU {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Release|Any CPU.Build.0 = Release|Any CPU - {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Release|x64.ActiveCfg = Release|Any CPU - {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Release|x64.Build.0 = Release|Any CPU - {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Release|x86.ActiveCfg = Release|Any CPU - {8F507DBE-56F9-437F-82D4-74C02EC44E41}.Release|x86.Build.0 = Release|Any CPU - {4F7E4917-4612-4B96-9838-025711ADE391}.Debug|Any CPU.ActiveCfg = Debug|x64 - {4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x64.ActiveCfg = Debug|x64 - {4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x64.Build.0 = Debug|x64 - {4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x86.ActiveCfg = Debug|Win32 - {4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x86.Build.0 = Debug|Win32 - {4F7E4917-4612-4B96-9838-025711ADE391}.Release|Any CPU.ActiveCfg = Release|x64 - {4F7E4917-4612-4B96-9838-025711ADE391}.Release|x64.ActiveCfg = Release|x64 - {4F7E4917-4612-4B96-9838-025711ADE391}.Release|x64.Build.0 = Release|x64 - {4F7E4917-4612-4B96-9838-025711ADE391}.Release|x86.ActiveCfg = Release|Win32 - {4F7E4917-4612-4B96-9838-025711ADE391}.Release|x86.Build.0 = Release|Win32 {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Debug|x64.ActiveCfg = Debug|Any CPU - {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Debug|x64.Build.0 = Debug|Any CPU - {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Debug|x86.ActiveCfg = Debug|Any CPU - {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Debug|x86.Build.0 = Debug|Any CPU {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Release|Any CPU.Build.0 = Release|Any CPU - {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Release|x64.ActiveCfg = Release|Any CPU - {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Release|x64.Build.0 = Release|Any CPU - {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Release|x86.ActiveCfg = Release|Any CPU - {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}.Release|x86.Build.0 = Release|Any CPU {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Debug|x64.ActiveCfg = Debug|Any CPU - {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Debug|x64.Build.0 = Debug|Any CPU - {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Debug|x86.ActiveCfg = Debug|Any CPU - {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Debug|x86.Build.0 = Debug|Any CPU {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Release|Any CPU.ActiveCfg = Release|Any CPU {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Release|Any CPU.Build.0 = Release|Any CPU - {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Release|x64.ActiveCfg = Release|Any CPU - {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Release|x64.Build.0 = Release|Any CPU - {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Release|x86.ActiveCfg = Release|Any CPU - {13EA96FC-CC83-4164-A7C0-4F30ED797460}.Release|x86.Build.0 = Release|Any CPU {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Debug|x64.ActiveCfg = Debug|Any CPU - {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Debug|x64.Build.0 = Debug|Any CPU - {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Debug|x86.ActiveCfg = Debug|Any CPU - {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Debug|x86.Build.0 = Debug|Any CPU {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|Any CPU.ActiveCfg = Release|Any CPU {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|Any CPU.Build.0 = Release|Any CPU - {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|x64.ActiveCfg = Release|Any CPU - {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|x64.Build.0 = Release|Any CPU - {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|x86.ActiveCfg = Release|Any CPU - {18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|x86.Build.0 = Release|Any CPU {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|x64.ActiveCfg = Debug|Any CPU - {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|x64.Build.0 = Debug|Any CPU - {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|x86.ActiveCfg = Debug|Any CPU - {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|x86.Build.0 = Debug|Any CPU {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|Any CPU.ActiveCfg = Release|Any CPU {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|Any CPU.Build.0 = Release|Any CPU - {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x64.ActiveCfg = Release|Any CPU - {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x64.Build.0 = Release|Any CPU - {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x86.ActiveCfg = Release|Any CPU - {C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x86.Build.0 = Release|Any CPU {6F82D669-382E-4435-8092-68C4440146D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6F82D669-382E-4435-8092-68C4440146D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F82D669-382E-4435-8092-68C4440146D8}.Debug|x64.ActiveCfg = Debug|Any CPU - {6F82D669-382E-4435-8092-68C4440146D8}.Debug|x64.Build.0 = Debug|Any CPU - {6F82D669-382E-4435-8092-68C4440146D8}.Debug|x86.ActiveCfg = Debug|Any CPU - {6F82D669-382E-4435-8092-68C4440146D8}.Debug|x86.Build.0 = Debug|Any CPU {6F82D669-382E-4435-8092-68C4440146D8}.Release|Any CPU.ActiveCfg = Release|Any CPU {6F82D669-382E-4435-8092-68C4440146D8}.Release|Any CPU.Build.0 = Release|Any CPU - {6F82D669-382E-4435-8092-68C4440146D8}.Release|x64.ActiveCfg = Release|Any CPU - {6F82D669-382E-4435-8092-68C4440146D8}.Release|x64.Build.0 = Release|Any CPU - {6F82D669-382E-4435-8092-68C4440146D8}.Release|x86.ActiveCfg = Release|Any CPU - {6F82D669-382E-4435-8092-68C4440146D8}.Release|x86.Build.0 = Release|Any CPU {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Debug|x64.ActiveCfg = Debug|Any CPU - {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Debug|x64.Build.0 = Debug|Any CPU - {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Debug|x86.ActiveCfg = Debug|Any CPU - {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Debug|x86.Build.0 = Debug|Any CPU {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Release|Any CPU.ActiveCfg = Release|Any CPU {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Release|Any CPU.Build.0 = Release|Any CPU - {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Release|x64.ActiveCfg = Release|Any CPU - {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Release|x64.Build.0 = Release|Any CPU - {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Release|x86.ActiveCfg = Release|Any CPU - {C558518A-C1A0-4224-AAA9-A8688474B4DC}.Release|x86.Build.0 = Release|Any CPU {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Debug|x64.ActiveCfg = Debug|Any CPU - {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Debug|x64.Build.0 = Debug|Any CPU - {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Debug|x86.ActiveCfg = Debug|Any CPU - {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Debug|x86.Build.0 = Debug|Any CPU {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Release|Any CPU.ActiveCfg = Release|Any CPU {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Release|Any CPU.Build.0 = Release|Any CPU - {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Release|x64.ActiveCfg = Release|Any CPU - {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Release|x64.Build.0 = Release|Any CPU - {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Release|x86.ActiveCfg = Release|Any CPU - {CDA5700E-78F3-4A9E-A9B0-704CBE94651C}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/Apache.Ignite/IgniteRunner.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite/IgniteRunner.cs b/modules/platforms/dotnet/Apache.Ignite/IgniteRunner.cs index 5703aa6..6d8aa6b 100644 --- a/modules/platforms/dotnet/Apache.Ignite/IgniteRunner.cs +++ b/modules/platforms/dotnet/Apache.Ignite/IgniteRunner.cs @@ -22,6 +22,7 @@ namespace Apache.Ignite using System.Configuration; using System.Linq; using System.ServiceProcess; + using System.Threading; using Apache.Ignite.Config; using Apache.Ignite.Core; using Apache.Ignite.Core.Impl; @@ -97,9 +98,12 @@ namespace Apache.Ignite IgniteService.DoInstall(allArgs); else { - Ignition.Start(Configurator.GetConfiguration(allArgs)); + var ignite = Ignition.Start(Configurator.GetConfiguration(allArgs)); - IgniteManager.DestroyJvm(); + // Wait until stopped. + var evt = new ManualResetEventSlim(false); + ignite.Stopped += (s, a) => evt.Set(); + evt.Wait(); } return; http://git-wip-us.apache.org/repos/asf/ignite/blob/ec38564a/modules/platforms/dotnet/DEVNOTES.txt ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/DEVNOTES.txt b/modules/platforms/dotnet/DEVNOTES.txt index df0ebb5..db5bc6c 100644 --- a/modules/platforms/dotnet/DEVNOTES.txt +++ b/modules/platforms/dotnet/DEVNOTES.txt @@ -6,7 +6,7 @@ Requirements: * Oracle JDK 7 and above * .NET Framework 4.0 * PowerShell 3.0+ -* Visual Studio 2010 (later versions require upgrading "common" C++ project, see below) +* Visual Studio 2010+ * JAVA_HOME environment variable set to the corresponding JDK (x64 or x86) * Apache Maven bin directory in PATH, or MAVEN_HOME environment variable @@ -15,15 +15,4 @@ Building binaries: Resulting binaries will be in bin folder, and NuGet packages in nupkg folder. Running built binaries: resulting "bin" folder in self contained, you can copy it anywhere and run - bin\Apache.Ignite.exe - -NOTE: -* x86 solution platform requires x86 Oracle JDK. -* x64 solution platform requires x64 Oracle JDK. -* AnyCPU platform requires at least one of the above. -To build truly universal AnyCPU binaries (suitable for x86 and x64 modes), both x64 and x86 Oracle JDKs should be installed. - -Building in later versions of Visual Studio: -* Open Apache.Ignite.sln in Visual Studio -* You will be prompted to "Update VC++ Compiler and Libraries", click "Update" -* OR, right-click "common" project in the Solution Explorer and select "Upgrade VC++ Compiler and Libraries" \ No newline at end of file + bin\Apache.Ignite.exe \ No newline at end of file