You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2016/02/04 15:45:27 UTC

[18/50] [abbrv] ignite git commit: IGNITE-1906: .NET: Implemented programmatic configuration.

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/Multicast/TcpDiscoveryMulticastIpFinder.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/Multicast/TcpDiscoveryMulticastIpFinder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/Multicast/TcpDiscoveryMulticastIpFinder.cs
new file mode 100644
index 0000000..25adf56
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/Multicast/TcpDiscoveryMulticastIpFinder.cs
@@ -0,0 +1,133 @@
+/*
+ * 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.Discovery.Tcp.Multicast
+{
+    using System;
+    using System.ComponentModel;
+    using Apache.Ignite.Core.Binary;
+    using Apache.Ignite.Core.Discovery.Tcp.Static;
+
+    /// <summary>
+    /// Multicast-based IP finder.
+    /// <para />
+    /// When TCP discovery starts this finder sends multicast request and waits
+    /// for some time when others nodes reply to this request with messages containing their addresses
+    /// </summary>
+    public class TcpDiscoveryMulticastIpFinder : TcpDiscoveryStaticIpFinder
+    {
+        /// <summary>
+        /// Default multicast port.
+        /// </summary>
+        public const int DefaultMulticastPort = 47400;
+
+        /// <summary>
+        /// Default address request attempts.
+        /// </summary>
+        public const int DefaultAddressRequestAttempts = 2;
+
+        /// <summary>
+        /// Default response timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultResponseTimeout = TimeSpan.FromMilliseconds(500);
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TcpDiscoveryMulticastIpFinder"/> class.
+        /// </summary>
+        public TcpDiscoveryMulticastIpFinder()
+        {
+            MulticastPort = DefaultMulticastPort;
+            AddressRequestAttempts = DefaultAddressRequestAttempts;
+            ResponseTimeout = DefaultResponseTimeout;
+        }
+
+        /// <summary>
+        /// Gets or sets the local address.
+        /// If provided address is non-loopback then multicast socket is bound to this interface. 
+        /// If local address is not set or is any local address then IP finder
+        /// creates multicast sockets for all found non-loopback addresses.
+        /// </summary>
+        public string LocalAddress { get; set; }
+
+        /// <summary>
+        /// Gets or sets the IP address of the multicast group.
+        /// </summary>
+        public string MulticastGroup { get; set; }
+
+        /// <summary>
+        /// Gets or sets the port number which multicast messages are sent to.
+        /// </summary>
+        [DefaultValue(DefaultMulticastPort)]
+        public int MulticastPort { get; set; }
+
+        /// <summary>
+        /// Gets or sets the number of attempts to send multicast address request. IP finder re-sends
+        /// request only in case if no reply for previous request is received.
+        /// </summary>
+        [DefaultValue(DefaultAddressRequestAttempts)]
+        public int AddressRequestAttempts { get; set; }
+
+        /// <summary>
+        /// Gets or sets the response timeout.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:00:00.5")]
+        public TimeSpan ResponseTimeout { get; set; }
+
+        /// <summary>
+        /// Gets or sets the time to live for multicast packets sent out on this
+        /// IP finder in order to control the scope of the multicast.
+        /// </summary>
+        public byte? TimeToLive { get; set; }  // TODO: Nullable?
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TcpDiscoveryMulticastIpFinder"/> class.
+        /// </summary>
+        /// <param name="reader">The reader.</param>
+        internal TcpDiscoveryMulticastIpFinder(IBinaryRawReader reader) : base(reader)
+        {
+            LocalAddress = reader.ReadString();
+            MulticastGroup = reader.ReadString();
+            MulticastPort = reader.ReadInt();
+            AddressRequestAttempts = reader.ReadInt();
+            ResponseTimeout = TimeSpan.FromMilliseconds(reader.ReadInt());
+            TimeToLive = reader.ReadBoolean() ? (byte?) reader.ReadInt() : null;
+        }
+
+        /** <inheritdoc /> */
+        internal override void Write(IBinaryRawWriter writer)
+        {
+            base.Write(writer);
+
+            writer.WriteString(LocalAddress);
+            writer.WriteString(MulticastGroup);
+            writer.WriteInt(MulticastPort);
+            writer.WriteInt(AddressRequestAttempts);
+            writer.WriteInt((int) ResponseTimeout.TotalMilliseconds);
+
+            writer.WriteBoolean(TimeToLive.HasValue);
+
+            if (TimeToLive.HasValue)
+                writer.WriteInt(TimeToLive.Value);
+        }
+
+        /** <inheritdoc /> */
+        protected override byte TypeCode
+        {
+            get { return TypeCodeMulticastIpFinder; }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/Static/TcpDiscoveryStaticIpFinder.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/Static/TcpDiscoveryStaticIpFinder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/Static/TcpDiscoveryStaticIpFinder.cs
new file mode 100644
index 0000000..331ca48
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/Static/TcpDiscoveryStaticIpFinder.cs
@@ -0,0 +1,84 @@
+/*
+ * 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.Discovery.Tcp.Static
+{
+    using System.Collections.Generic;
+    using System.Diagnostics.CodeAnalysis;
+    using Apache.Ignite.Core.Binary;
+
+    /// <summary>
+    /// IP Finder which works only with pre-configured list of IP addresses.
+    /// </summary>
+    public class TcpDiscoveryStaticIpFinder : TcpDiscoveryIpFinderBase
+    {
+        /// <summary>
+        /// Gets or sets the end points.
+        /// </summary>
+        [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public ICollection<string> Endpoints { get; set; }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TcpDiscoveryStaticIpFinder"/> class.
+        /// </summary>
+        public TcpDiscoveryStaticIpFinder()
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TcpDiscoveryStaticIpFinder"/> class.
+        /// </summary>
+        /// <param name="reader">The reader.</param>
+        internal TcpDiscoveryStaticIpFinder(IBinaryRawReader reader)
+        {
+            var count = reader.ReadInt();
+
+            if (count > 0)
+            {
+                Endpoints = new List<string>(count);
+
+                for (int i = 0; i < count; i++)
+                    Endpoints.Add(reader.ReadString());
+            }
+        }
+
+        /** <inheritdoc /> */
+        internal override void Write(IBinaryRawWriter writer)
+        {
+            base.Write(writer);
+
+            var eps = Endpoints;
+
+            if (eps != null)
+            {
+                writer.WriteInt(eps.Count);
+
+                foreach (var ep in eps)
+                    writer.WriteString(ep);
+            }
+            else
+                writer.WriteInt(0);
+        }
+        
+        /** <inheritdoc /> */
+        protected override byte TypeCode
+        {
+            get { return TypeCodeVmIpFinder; }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoveryIpFinderBase.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoveryIpFinderBase.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoveryIpFinderBase.cs
new file mode 100644
index 0000000..e06a88d
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoveryIpFinderBase.cs
@@ -0,0 +1,78 @@
+/*
+ * 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.Discovery.Tcp
+{
+    using Apache.Ignite.Core.Binary;
+    using Apache.Ignite.Core.Discovery.Tcp.Multicast;
+    using Apache.Ignite.Core.Discovery.Tcp.Static;
+
+    /// <summary>
+    /// Base IpFinder class.
+    /// </summary>
+    public abstract class TcpDiscoveryIpFinderBase : ITcpDiscoveryIpFinder
+    {
+        /** */
+        protected const byte TypeCodeVmIpFinder = 1;
+
+        /** */
+        protected const byte TypeCodeMulticastIpFinder = 2;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TcpDiscoveryIpFinderBase"/> class.
+        /// Prevents user-defined implementations.
+        /// </summary>
+        protected internal TcpDiscoveryIpFinderBase()
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Writes this instance to the specified writer.
+        /// </summary>
+        /// <param name="writer">The writer.</param>
+        internal virtual void Write(IBinaryRawWriter writer)
+        {
+            writer.WriteByte(TypeCode);
+        }
+
+        /// <summary>
+        /// Gets the type code to be used in Java to determine ip finder type.
+        /// </summary>
+        protected abstract byte TypeCode { get; }
+
+        /// <summary>
+        /// Reads the instance.
+        /// </summary>
+        internal static TcpDiscoveryIpFinderBase ReadInstance(IBinaryRawReader reader)
+        {
+            var code = reader.ReadByte();
+
+            switch (code)
+            {
+                case TypeCodeVmIpFinder:
+                    return new TcpDiscoveryStaticIpFinder(reader);
+
+                case TypeCodeMulticastIpFinder:
+                    return new TcpDiscoveryMulticastIpFinder(reader);
+
+                default:
+                    return null;
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs
new file mode 100644
index 0000000..ea946e8
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs
@@ -0,0 +1,144 @@
+/*
+ * 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.Discovery.Tcp
+{
+    using System;
+    using System.ComponentModel;
+    using Apache.Ignite.Core.Binary;
+    using Apache.Ignite.Core.Impl.Binary;
+
+    /// <summary>
+    /// TCP discover service provider.
+    /// </summary>
+    public class TcpDiscoverySpi : IDiscoverySpi
+    {
+        /// <summary>
+        /// Default socket timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultSocketTimeout = TimeSpan.FromMilliseconds(5000);
+
+        /// <summary>
+        /// Default acknowledgement timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultAckTimeout = TimeSpan.FromMilliseconds(5000);
+
+        /// <summary>
+        /// Default maximum acknowledgement timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultMaxAckTimeout = TimeSpan.FromMinutes(10);
+
+        /// <summary>
+        /// Default network timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultNetworkTimeout = TimeSpan.FromMilliseconds(5000);
+
+        /// <summary>
+        /// Default join timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultJoinTimeout = TimeSpan.Zero;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TcpDiscoverySpi"/> class.
+        /// </summary>
+        public TcpDiscoverySpi()
+        {
+            SocketTimeout = DefaultSocketTimeout;
+            AckTimeout = DefaultAckTimeout;
+            MaxAckTimeout = DefaultMaxAckTimeout;
+            NetworkTimeout = DefaultNetworkTimeout;
+            JoinTimeout = DefaultJoinTimeout;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TcpDiscoverySpi"/> class.
+        /// </summary>
+        /// <param name="reader">The reader.</param>
+        internal TcpDiscoverySpi(BinaryReader reader)
+        {
+            IpFinder = reader.ReadBoolean() ? TcpDiscoveryIpFinderBase.ReadInstance(reader) : null;
+
+            SocketTimeout = reader.ReadLongAsTimespan();
+            AckTimeout = reader.ReadLongAsTimespan();
+            MaxAckTimeout = reader.ReadLongAsTimespan();
+            NetworkTimeout = reader.ReadLongAsTimespan();
+            JoinTimeout = reader.ReadLongAsTimespan();
+        }
+
+        /// <summary>
+        /// Gets or sets the IP finder which defines how nodes will find each other on the network.
+        /// </summary>
+        public ITcpDiscoveryIpFinder IpFinder { get; set; }
+
+        /// <summary>
+        /// Gets or sets the socket timeout.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:00:05")]
+        public TimeSpan SocketTimeout { get; set; }
+
+        /// <summary>
+        /// Gets or sets the timeout for receiving acknowledgement for sent message.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:00:05")]
+        public TimeSpan AckTimeout { get; set; }
+
+        /// <summary>
+        /// Gets or sets the maximum timeout for receiving acknowledgement for sent message.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:10:00")]
+        public TimeSpan MaxAckTimeout { get; set; }
+
+        /// <summary>
+        /// Gets or sets the network timeout.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:00:05")]
+        public TimeSpan NetworkTimeout { get; set; }
+        
+        /// <summary>
+        /// Gets or sets the join timeout.
+        /// </summary>
+        public TimeSpan JoinTimeout { get; set; }
+
+        /// <summary>
+        /// Writes this instance to the specified writer.
+        /// </summary>
+        internal void Write(IBinaryRawWriter writer)
+        {
+            var ipFinder = IpFinder;
+
+            if (ipFinder != null)
+            {
+                writer.WriteBoolean(true);
+
+                var finder = ipFinder as TcpDiscoveryIpFinderBase;
+
+                if (finder == null)
+                    throw new InvalidOperationException("Unsupported IP finder: " + ipFinder.GetType());
+
+                finder.Write(writer);
+            }
+            else
+                writer.WriteBoolean(false);
+
+            writer.WriteLong((long) SocketTimeout.TotalMilliseconds);
+            writer.WriteLong((long) AckTimeout.TotalMilliseconds);
+            writer.WriteLong((long) MaxAckTimeout.TotalMilliseconds);
+            writer.WriteLong((long) NetworkTimeout.TotalMilliseconds);
+            writer.WriteLong((long) JoinTimeout.TotalMilliseconds);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
index a85e24c..d18e790 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
@@ -21,6 +21,7 @@ namespace Apache.Ignite.Core
     using System.Diagnostics.CodeAnalysis;
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache;
+    using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Cluster;
     using Apache.Ignite.Core.Common;
     using Apache.Ignite.Core.Compute;
@@ -93,6 +94,15 @@ namespace Apache.Ignite.Core
         ICache<TK, TV> GetOrCreateCache<TK, TV>(string name);
 
         /// <summary>
+        /// Gets existing cache with the given name or creates new one using provided configuration.
+        /// </summary>
+        /// <typeparam name="TK">Cache key type.</typeparam>
+        /// <typeparam name="TV">Cache value type.</typeparam>
+        /// <param name="configuration">Cache configuration.</param>
+        /// <returns>Existing or newly created cache.</returns>
+        ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration);
+
+        /// <summary>
         /// Dynamically starts new cache using template configuration.
         /// </summary>
         /// <typeparam name="TK">Cache key type.</typeparam>
@@ -102,8 +112,17 @@ namespace Apache.Ignite.Core
         ICache<TK, TV> CreateCache<TK, TV>(string name);
 
         /// <summary>
-        /// Destroys dynamically created (with <see cref="CreateCache{TK,TV}"/> or 
-        /// <see cref="GetOrCreateCache{TK,TV}"/>) cache.
+        /// Dynamically starts new cache using provided configuration.
+        /// </summary>
+        /// <typeparam name="TK">Cache key type.</typeparam>
+        /// <typeparam name="TV">Cache value type.</typeparam>
+        /// <param name="configuration">Cache configuration.</param>
+        /// <returns>Existing or newly created cache.</returns>
+        ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration);
+
+        /// <summary>
+        /// Destroys dynamically created (with <see cref="CreateCache{TK,TV}(string)"/> or 
+        /// <see cref="GetOrCreateCache{TK,TV}(string)"/>) cache.
         /// </summary>
         /// <param name="name">The name of the cache to stop.</param>
         void DestroyCache(string name);
@@ -171,5 +190,11 @@ namespace Apache.Ignite.Core
         /// or null if it does not exist and <c>create</c> flag is not set.</returns>
         /// <exception cref="IgniteException">If atomic long could not be fetched or created.</exception>
         IAtomicLong GetAtomicLong(string name, long initialValue, bool create);
+
+        /// <summary>
+        /// Gets the configuration of this Ignite instance.
+        /// </summary>
+        [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Justification = "Semantics.")]
+        IgniteConfiguration GetConfiguration();
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index a4c37d1..1dd22ea 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -15,12 +15,27 @@
  * limitations under the License.
  */
 
-namespace Apache.Ignite.Core
+#pragma warning disable 618  // deprecated SpringConfigUrl
+ namespace Apache.Ignite.Core
 {
+    using System;
     using System.Collections.Generic;
+    using System.ComponentModel;
+    using System.Diagnostics;
     using System.Diagnostics.CodeAnalysis;
+    using System.IO;
+    using System.Linq;
     using Apache.Ignite.Core.Binary;
+    using Apache.Ignite.Core.Cache.Configuration;
+    using Apache.Ignite.Core.Discovery;
+    using Apache.Ignite.Core.Discovery.Tcp;
+    using Apache.Ignite.Core.Events;
+    using Apache.Ignite.Core.Impl;
+    using Apache.Ignite.Core.Impl.Binary;
+    using Apache.Ignite.Core.Impl.Common;
     using Apache.Ignite.Core.Lifecycle;
+    using BinaryReader = Apache.Ignite.Core.Impl.Binary.BinaryReader;
+    using BinaryWriter = Apache.Ignite.Core.Impl.Binary.BinaryWriter;
 
     /// <summary>
     /// Grid configuration.
@@ -38,40 +53,238 @@ namespace Apache.Ignite.Core
         public const int DefaultJvmMaxMem = 1024;
 
         /// <summary>
-        /// Default constructor.
+        /// Default metrics expire time.
+        /// </summary>
+        public static readonly TimeSpan DefaultMetricsExpireTime = TimeSpan.MaxValue;
+
+        /// <summary>
+        /// Default metrics history size.
+        /// </summary>
+        public const int DefaultMetricsHistorySize = 10000;
+
+        /// <summary>
+        /// Default metrics log frequency.
+        /// </summary>
+        public static readonly TimeSpan DefaultMetricsLogFrequency = TimeSpan.FromMilliseconds(60000);
+
+        /// <summary>
+        /// Default metrics update frequency.
+        /// </summary>
+        public static readonly TimeSpan DefaultMetricsUpdateFrequency = TimeSpan.FromMilliseconds(2000);
+
+        /// <summary>
+        /// Default network timeout.
+        /// </summary>
+        public static readonly TimeSpan DefaultNetworkTimeout = TimeSpan.FromMilliseconds(5000);
+
+        /// <summary>
+        /// Default network retry delay.
+        /// </summary>
+        public static readonly TimeSpan DefaultNetworkSendRetryDelay = TimeSpan.FromMilliseconds(1000);
+
+        /// <summary>
+        /// Default network retry count.
+        /// </summary>
+        public const int DefaultNetworkSendRetryCount = 3;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IgniteConfiguration"/> class.
         /// </summary>
         public IgniteConfiguration()
         {
             JvmInitialMemoryMb = DefaultJvmInitMem;
             JvmMaxMemoryMb = DefaultJvmMaxMem;
+
+            MetricsExpireTime = DefaultMetricsExpireTime;
+            MetricsHistorySize = DefaultMetricsHistorySize;
+            MetricsLogFrequency = DefaultMetricsLogFrequency;
+            MetricsUpdateFrequency = DefaultMetricsUpdateFrequency;
+            NetworkTimeout = DefaultNetworkTimeout;
+            NetworkSendRetryCount = DefaultNetworkSendRetryCount;
+            NetworkSendRetryDelay = DefaultNetworkSendRetryDelay;
         }
 
         /// <summary>
-        /// Copying constructor.
+        /// Initializes a new instance of the <see cref="IgniteConfiguration"/> class.
         /// </summary>
-        /// <param name="cfg">Configuration.</param>
-        internal IgniteConfiguration(IgniteConfiguration cfg)
+        /// <param name="configuration">The configuration to copy.</param>
+        public IgniteConfiguration(IgniteConfiguration configuration)
         {
-            SpringConfigUrl = cfg.SpringConfigUrl;
-            JvmDllPath = cfg.JvmDllPath;
-            IgniteHome = cfg.IgniteHome;
-            JvmClasspath = cfg.JvmClasspath;
-            SuppressWarnings = cfg.SuppressWarnings;
+            IgniteArgumentCheck.NotNull(configuration, "configuration");
+
+            CopyLocalProperties(configuration);
+
+            using (var stream = IgniteManager.Memory.Allocate().GetStream())
+            {
+                var marsh = new Marshaller(configuration.BinaryConfiguration);
+
+                configuration.WriteCore(marsh.StartMarshal(stream));
+
+                stream.SynchronizeOutput();
+
+                stream.Seek(0, SeekOrigin.Begin);
+
+                ReadCore(marsh.StartUnmarshal(stream));
+            }
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IgniteConfiguration"/> class from a reader.
+        /// </summary>
+        /// <param name="binaryReader">The binary reader.</param>
+        internal IgniteConfiguration(BinaryReader binaryReader)
+        {
+            Read(binaryReader);
+        }
+
+        /// <summary>
+        /// Writes this instance to a writer.
+        /// </summary>
+        /// <param name="writer">The writer.</param>
+        internal void Write(BinaryWriter writer)
+        {
+            Debug.Assert(writer != null);
+
+            if (!string.IsNullOrEmpty(SpringConfigUrl))
+            {
+                // Do not write details when there is Spring config.
+                writer.WriteBoolean(false);
+                return;
+            }
+
+            writer.WriteBoolean(true);  // details are present
+
+            WriteCore(writer);
+        }
+
+        /// <summary>
+        /// Writes this instance to a writer.
+        /// </summary>
+        /// <param name="writer">The writer.</param>
+        private void WriteCore(BinaryWriter writer)
+        {
+            // Simple properties
+            writer.WriteBoolean(ClientMode);
+            writer.WriteIntArray(IncludedEventTypes == null ? null : IncludedEventTypes.ToArray());
+
+            writer.WriteLong((long) MetricsExpireTime.TotalMilliseconds);
+            writer.WriteInt(MetricsHistorySize);
+            writer.WriteLong((long) MetricsLogFrequency.TotalMilliseconds);
+            var metricsUpdateFreq = (long) MetricsUpdateFrequency.TotalMilliseconds;
+            writer.WriteLong(metricsUpdateFreq >= 0 ? metricsUpdateFreq : -1);
+            writer.WriteInt(NetworkSendRetryCount);
+            writer.WriteLong((long) NetworkSendRetryDelay.TotalMilliseconds);
+            writer.WriteLong((long) NetworkTimeout.TotalMilliseconds);
+            writer.WriteString(WorkDirectory);
+            writer.WriteString(Localhost);
+
+            // Cache config
+            var caches = CacheConfiguration;
+
+            if (caches == null)
+                writer.WriteInt(0);
+            else
+            {
+                writer.WriteInt(caches.Count);
+
+                foreach (var cache in caches)
+                    cache.Write(writer);
+            }
+
+            // Discovery config
+            var disco = DiscoverySpi;
+
+            if (disco != null)
+            {
+                writer.WriteBoolean(true);
+
+                var tcpDisco = disco as TcpDiscoverySpi;
+
+                if (tcpDisco == null)
+                    throw new InvalidOperationException("Unsupported discovery SPI: " + disco.GetType());
+
+                tcpDisco.Write(writer);
+            }
+            else
+                writer.WriteBoolean(false);
+        }
+
+        /// <summary>
+        /// Reads data from specified reader into current instance.
+        /// </summary>
+        /// <param name="r">The binary reader.</param>
+        private void ReadCore(BinaryReader r)
+        {
+            // Simple properties
+            ClientMode = r.ReadBoolean();
+            IncludedEventTypes = r.ReadIntArray();
 
-            JvmOptions = cfg.JvmOptions != null ? new List<string>(cfg.JvmOptions) : null;
-            Assemblies = cfg.Assemblies != null ? new List<string>(cfg.Assemblies) : null;
+            MetricsExpireTime = r.ReadLongAsTimespan();
+            MetricsHistorySize = r.ReadInt();
+            MetricsLogFrequency = r.ReadLongAsTimespan();
+            MetricsUpdateFrequency = r.ReadLongAsTimespan();
+            NetworkSendRetryCount = r.ReadInt();
+            NetworkSendRetryDelay = r.ReadLongAsTimespan();
+            NetworkTimeout = r.ReadLongAsTimespan();
+            WorkDirectory = r.ReadString();
+            Localhost = r.ReadString();
 
-            BinaryConfiguration = cfg.BinaryConfiguration != null
-                ? new BinaryConfiguration(cfg.BinaryConfiguration)
-                : null;
+            // Cache config
+            var cacheCfgCount = r.ReadInt();
+            CacheConfiguration = new List<CacheConfiguration>(cacheCfgCount);
+            for (int i = 0; i < cacheCfgCount; i++)
+                CacheConfiguration.Add(new CacheConfiguration(r));
 
-            LifecycleBeans = cfg.LifecycleBeans != null ? new List<ILifecycleBean>(cfg.LifecycleBeans) : null;
+            // Discovery config
+            DiscoverySpi = r.ReadBoolean() ? new TcpDiscoverySpi(r) : null;
+        }
+
+        /// <summary>
+        /// Reads data from specified reader into current instance.
+        /// </summary>
+        /// <param name="binaryReader">The binary reader.</param>
+        private void Read(BinaryReader binaryReader)
+        {
+            var r = binaryReader;
+
+            CopyLocalProperties(r.Marshaller.Ignite.Configuration);
+
+            ReadCore(r);
+
+            // Misc
+            IgniteHome = r.ReadString();
 
-            JvmInitialMemoryMb = cfg.JvmInitialMemoryMb;
-            JvmMaxMemoryMb = cfg.JvmMaxMemoryMb;
+            JvmInitialMemoryMb = (int) (r.ReadLong()/1024/2014);
+            JvmMaxMemoryMb = (int) (r.ReadLong()/1024/2014);
+
+            // Local data (not from reader)
+            JvmDllPath = Process.GetCurrentProcess().Modules.OfType<ProcessModule>()
+                .Single(x => string.Equals(x.ModuleName, IgniteUtils.FileJvmDll, StringComparison.OrdinalIgnoreCase))
+                .FileName;
+        }
+
+        /// <summary>
+        /// Copies the local properties (properties that are not written in Write method).
+        /// </summary>
+        private void CopyLocalProperties(IgniteConfiguration cfg)
+        {
+            GridName = cfg.GridName;
+            BinaryConfiguration = cfg.BinaryConfiguration == null
+                ? null
+                : new BinaryConfiguration(cfg.BinaryConfiguration);
+            JvmClasspath = cfg.JvmClasspath;
+            JvmOptions = cfg.JvmOptions;
+            Assemblies = cfg.Assemblies;
+            SuppressWarnings = cfg.SuppressWarnings;
+            LifecycleBeans = cfg.LifecycleBeans;
         }
 
         /// <summary>
+        /// Grid name which is used if not provided in configuration file.
+        /// </summary>
+        public string GridName { get; set; }
+
+        /// <summary>
         /// Gets or sets the binary configuration.
         /// </summary>
         /// <value>
@@ -80,9 +293,22 @@ namespace Apache.Ignite.Core
         public BinaryConfiguration BinaryConfiguration { get; set; }
 
         /// <summary>
+        /// Gets or sets the cache configuration.
+        /// </summary>
+        /// <value>
+        /// The cache configuration.
+        /// </value>
+        [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public ICollection<CacheConfiguration> CacheConfiguration { get; set; }
+
+        /// <summary>
         /// URL to Spring configuration file.
         /// </summary>
         [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings")]
+        [Obsolete("Ignite.NET can be configured natively without Spring. " +
+                  "Setting this property will ignore all other properties except " +
+                  "IgniteHome, Assemblies, SuppressWarnings, LifecycleBeans, JvmOptions, JvmdllPath, IgniteHome, " +
+                  "JvmInitialMemoryMb, JvmMaxMemoryMb.")]
         public string SpringConfigUrl { get; set; }
 
         /// <summary>
@@ -115,7 +341,7 @@ namespace Apache.Ignite.Core
         /// assemblies reside.
         /// </summary>
         [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
-        public IList<string> Assemblies { get; set; }
+        public ICollection<string> Assemblies { get; set; }
 
         /// <summary>
         /// Whether to suppress warnings.
@@ -132,12 +358,95 @@ namespace Apache.Ignite.Core
         /// Initial amount of memory in megabytes given to JVM. Maps to -Xms Java option.
         /// Defaults to <see cref="DefaultJvmInitMem"/>.
         /// </summary>
+        [DefaultValue(DefaultJvmInitMem)]
         public int JvmInitialMemoryMb { get; set; }
 
         /// <summary>
         /// Maximum amount of memory in megabytes given to JVM. Maps to -Xmx Java option.
         /// Defaults to <see cref="DefaultJvmMaxMem"/>.
         /// </summary>
+        [DefaultValue(DefaultJvmMaxMem)]
         public int JvmMaxMemoryMb { get; set; }
+
+        /// <summary>
+        /// Gets or sets the discovery service provider.
+        /// Null for default discovery.
+        /// </summary>
+        public IDiscoverySpi DiscoverySpi { get; set; }
+
+        /// <summary>
+        /// Gets or sets a value indicating whether node should start in client mode.
+        /// Client node cannot hold data in the caches.
+        /// Default is null and takes this setting from Spring configuration.
+        /// </summary>
+        public bool ClientMode { get; set; }
+
+        /// <summary>
+        /// Gets or sets a set of event types (<see cref="EventType" />) to be recorded by Ignite. 
+        /// </summary>
+        [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
+        public ICollection<int> IncludedEventTypes { get; set; }
+
+        /// <summary>
+        /// Gets or sets the time after which a certain metric value is considered expired.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "10675199.02:48:05.4775807")]
+        public TimeSpan MetricsExpireTime { get; set; }
+
+        /// <summary>
+        /// Gets or sets the number of metrics kept in history to compute totals and averages.
+        /// </summary>
+        [DefaultValue(DefaultMetricsHistorySize)]
+        public int MetricsHistorySize { get; set; }
+
+        /// <summary>
+        /// Gets or sets the frequency of metrics log print out.
+        /// <see cref="TimeSpan.Zero"/> to disable metrics print out.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:01:00")]
+        public TimeSpan MetricsLogFrequency { get; set; }
+
+        /// <summary>
+        /// Gets or sets the job metrics update frequency.
+        /// <see cref="TimeSpan.Zero"/> to update metrics on job start/finish.
+        /// Negative value to never update metrics.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:00:02")]
+        public TimeSpan MetricsUpdateFrequency { get; set; }
+
+        /// <summary>
+        /// Gets or sets the network send retry count.
+        /// </summary>
+        [DefaultValue(DefaultNetworkSendRetryCount)]
+        public int NetworkSendRetryCount { get; set; }
+
+        /// <summary>
+        /// Gets or sets the network send retry delay.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:00:01")]
+        public TimeSpan NetworkSendRetryDelay { get; set; }
+
+        /// <summary>
+        /// Gets or sets the network timeout.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "00:00:05")]
+        public TimeSpan NetworkTimeout { get; set; }
+
+        /// <summary>
+        /// Gets or sets the work directory.
+        /// If not provided, a folder under <see cref="IgniteHome"/> will be used.
+        /// </summary>
+        public string WorkDirectory { get; set; }
+
+        /// <summary>
+        /// Gets or sets system-wide local address or host for all Ignite components to bind to. 
+        /// If provided it will override all default local bind settings within Ignite.
+        /// <para />
+        /// If <c>null</c> then Ignite tries to use local wildcard address.That means that all services 
+        /// will be available on all network interfaces of the host machine. 
+        /// <para />
+        /// It is strongly recommended to set this parameter for all production environments.
+        /// </summary>
+        public string Localhost { get; set; }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs
index 3a27ad1..0549010 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+#pragma warning disable 618  // deprecated SpringConfigUrl
 namespace Apache.Ignite.Core 
 {
     using System;
@@ -41,7 +42,7 @@ namespace Apache.Ignite.Core
     /// <summary>
     /// This class defines a factory for the main Ignite API.
     /// <p/>
-    /// Use <see cref="Ignition.Start()"/> method to start Ignite with default configuration.
+    /// Use <see cref="Start()"/> method to start Ignite with default configuration.
     /// <para/>
     /// All members are thread-safe and may be used concurrently from multiple threads.
     /// </summary>
@@ -51,9 +52,6 @@ namespace Apache.Ignite.Core
         internal const string EnvIgniteSpringConfigUrlPrefix = "IGNITE_SPRING_CONFIG_URL_PREFIX";
 
         /** */
-        private const string DefaultCfg = "config/default-config.xml";
-
-        /** */
         private static readonly object SyncRoot = new object();
 
         /** GC warning flag. */
@@ -125,15 +123,6 @@ namespace Apache.Ignite.Core
         {
             IgniteArgumentCheck.NotNull(cfg, "cfg");
 
-            // Copy configuration to avoid changes to user-provided instance.
-            IgniteConfigurationEx cfgEx = cfg as IgniteConfigurationEx;
-
-            cfg = cfgEx == null ? new IgniteConfiguration(cfg) : new IgniteConfigurationEx(cfgEx);
-
-            // Set default Spring config if needed.
-            if (cfg.SpringConfigUrl == null)
-                cfg.SpringConfigUrl = DefaultCfg;
-
             lock (SyncRoot)
             {
                 // 1. Check GC settings.
@@ -146,9 +135,11 @@ namespace Apache.Ignite.Core
 
                 IgniteManager.CreateJvmContext(cfg, cbs);
 
-                var gridName = cfgEx != null ? cfgEx.GridName : null;
+                var gridName = cfg.GridName;
 
-                var cfgPath = Environment.GetEnvironmentVariable(EnvIgniteSpringConfigUrlPrefix) + cfg.SpringConfigUrl;
+                var cfgPath = cfg.SpringConfigUrl == null 
+                    ? null 
+                    : Environment.GetEnvironmentVariable(EnvIgniteSpringConfigUrlPrefix) + cfg.SpringConfigUrl;
 
                 // 3. Create startup object which will guide us through the rest of the process.
                 _startup = new Startup(cfg, cbs);
@@ -229,7 +220,7 @@ namespace Apache.Ignite.Core
             {
                 BinaryReader reader = BinaryUtils.Marshaller.StartUnmarshal(inStream);
 
-                PrepareConfiguration(reader);
+                PrepareConfiguration(reader, outStream);
 
                 PrepareLifecycleBeans(reader, outStream, handleRegistry);
             }
@@ -245,7 +236,8 @@ namespace Apache.Ignite.Core
         /// Preapare configuration.
         /// </summary>
         /// <param name="reader">Reader.</param>
-        private static void PrepareConfiguration(BinaryReader reader)
+        /// <param name="outStream">Response stream.</param>
+        private static void PrepareConfiguration(BinaryReader reader, PlatformMemoryStream outStream)
         {
             // 1. Load assemblies.
             IgniteConfiguration cfg = _startup.Configuration;
@@ -264,6 +256,9 @@ namespace Apache.Ignite.Core
                 cfg.BinaryConfiguration = binaryCfg;
 
             _startup.Marshaller = new Marshaller(cfg.BinaryConfiguration);
+
+            // 3. Send configuration details to Java
+            cfg.Write(_startup.Marshaller.StartMarshal(outStream));
         }
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Binary.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Binary.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Binary.cs
index 9b43564..efe1df4 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Binary.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Binary.cs
@@ -104,9 +104,6 @@ namespace Apache.Ignite.Core.Impl.Binary
             if (obj0 == null)
                 throw new ArgumentException("Unsupported object type: " + obj.GetType());
 
-            if (obj0 is BinaryEnum)
-                throw new InvalidOperationException("Builder cannot be created for enum.");
-
             IBinaryTypeDescriptor desc = _marsh.GetDescriptor(true, obj0.TypeId);
             
             return Builder0(null, obj0, desc);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs
index c3dcc3a..f3f8457 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs
@@ -17,6 +17,7 @@
 
 namespace Apache.Ignite.Core.Impl.Binary
 {
+    using System;
     using System.Collections.Generic;
     using Apache.Ignite.Core.Binary;
 
@@ -48,5 +49,23 @@ namespace Apache.Ignite.Core.Impl.Binary
         {
             return (Dictionary<TKey, TValue>) reader.ReadDictionary(size => new Dictionary<TKey, TValue>(size));
         }
+
+        /// <summary>
+        /// Reads long as timespan with range checks.
+        /// </summary>
+        /// <param name="reader">The reader.</param>
+        /// <returns>TimeSpan.</returns>
+        public static TimeSpan ReadLongAsTimespan(this IBinaryRawReader reader)
+        {
+            long ms = reader.ReadLong();
+
+            if (ms >= TimeSpan.MaxValue.TotalMilliseconds)
+                return TimeSpan.MaxValue;
+
+            if (ms <= TimeSpan.MinValue.TotalMilliseconds)
+                return TimeSpan.MinValue;
+
+            return TimeSpan.FromMilliseconds(ms);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
new file mode 100644
index 0000000..fccbfae
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
@@ -0,0 +1,92 @@
+/*
+ * 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.Binary
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Linq;
+
+    /// <summary>
+    /// Provides mapping between Java and .NET basic types.
+    /// </summary>
+    internal static class JavaTypes
+    {
+        /** */
+        private static readonly Dictionary<Type, string> NetToJava = new Dictionary<Type, string>
+        {
+            {typeof (bool), "java.lang.Boolean"},
+            {typeof (byte), "java.lang.Byte"},
+            {typeof (sbyte), "java.lang.Byte"},
+            {typeof (short), "java.lang.Short"},
+            {typeof (ushort), "java.lang.Short"},
+            {typeof (char), "java.lang.Character"},
+            {typeof (int), "java.lang.Integer"},
+            {typeof (uint), "java.lang.Integer"},
+            {typeof (long), "java.lang.Long"},
+            {typeof (ulong), "java.lang.Long"},
+            {typeof (float), "java.lang.Float"},
+            {typeof (double), "java.lang.Double"},
+            {typeof (string), "java.lang.String"},
+            {typeof (decimal), "java.math.BigDecimal"},
+            {typeof (Guid), "java.util.UUID"}
+        };
+
+        /** */
+        private static readonly Dictionary<string, Type> JavaToNet =
+            NetToJava.GroupBy(x => x.Value).ToDictionary(g => g.Key, g => g.First().Key);
+
+        /** */
+        private static readonly string MappedTypes = string.Join(", ", NetToJava.Keys.Select(x => x.Name));
+
+        /// <summary>
+        /// Gets the corresponding Java type name.
+        /// </summary>
+        public static string GetJavaTypeName(Type type)
+        {
+            if (type == null)
+                return null;
+
+            string res;
+
+            return NetToJava.TryGetValue(type, out res) ? res : null;
+        }
+
+        /// <summary>
+        /// Gets .NET type that corresponds to specified Java type name.
+        /// </summary>
+        /// <param name="javaTypeName">Name of the java type.</param>
+        /// <returns></returns>
+        public static Type GetDotNetType(string javaTypeName)
+        {
+            if (string.IsNullOrEmpty(javaTypeName))
+                return null;
+
+            Type res;
+
+            return JavaToNet.TryGetValue(javaTypeName, out res) ? res : null;
+        }
+
+        /// <summary>
+        /// Gets the supported types as a comma-separated string.
+        /// </summary>
+        public static string SupportedTypesString
+        {
+            get { return MappedTypes; }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs
index 4274744..73f3618 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs
@@ -88,11 +88,11 @@ namespace Apache.Ignite.Core.Impl.Binary
                 foreach (BinaryTypeConfiguration typeCfg in typeCfgs)
                     AddUserType(cfg, typeCfg, typeResolver, dfltSerializer);
 
-            ICollection<string> types = cfg.Types;
+            var typeNames = cfg.Types;
 
-            if (types != null)
-                foreach (string type in types)
-                    AddUserType(cfg, new BinaryTypeConfiguration(type), typeResolver, dfltSerializer);
+            if (typeNames != null)
+                foreach (string typeName in typeNames)
+                    AddUserType(cfg, new BinaryTypeConfiguration(typeName), typeResolver, dfltSerializer);
 
             if (cfg.DefaultSerializer == null)
                 cfg.DefaultSerializer = dfltSerializer;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs
index f55863e..d1296ec 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs
@@ -25,6 +25,7 @@ namespace Apache.Ignite.Core.Impl.Cache
     using System.Threading.Tasks;
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache;
+    using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Cache.Expiry;
     using Apache.Ignite.Core.Cache.Query;
     using Apache.Ignite.Core.Cache.Query.Continuous;
@@ -68,7 +69,7 @@ namespace Apache.Ignite.Core.Impl.Cache
 
         /** Async instance. */
         private readonly Lazy<CacheImpl<TK, TV>> _asyncInstance;
-
+        
         /// <summary>
         /// Constructor.
         /// </summary>
@@ -152,6 +153,12 @@ namespace Apache.Ignite.Core.Impl.Cache
         }
 
         /** <inheritDoc /> */
+        public CacheConfiguration GetConfiguration()
+        {
+            return DoInOp((int) CacheOp.GetConfig, stream => new CacheConfiguration(Marshaller.StartUnmarshal(stream)));
+        }
+
+        /** <inheritDoc /> */
         public bool IsEmpty()
         {
             return GetSize() == 0;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheOp.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheOp.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheOp.cs
index 1709dc5..61ccb5f 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheOp.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheOp.cs
@@ -59,6 +59,7 @@ namespace Apache.Ignite.Core.Impl.Cache
         RemoveBool = 35,
         RemoveObj = 36,
         Replace2 = 37,
-        Replace3 = 38
+        Replace3 = 38,
+        GetConfig = 39
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStore.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStore.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStore.cs
index 5aa806b..7785280 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStore.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Store/CacheStore.cs
@@ -101,15 +101,25 @@ namespace Apache.Ignite.Core.Impl.Cache.Store
         {
             using (var stream = IgniteManager.Memory.Get(memPtr).GetStream())
             {
-                var reader = BinaryUtils.Marshaller.StartUnmarshal(stream, BinaryMode.KeepBinary);
+                var reader = BinaryUtils.Marshaller.StartUnmarshal(stream);
 
-                var className = reader.ReadString();
                 var convertBinary = reader.ReadBoolean();
-                var propertyMap = reader.ReadDictionaryAsGeneric<string, object>();
+                var factory = reader.ReadObject<IFactory<ICacheStore>>();
 
-                var store = IgniteUtils.CreateInstance<ICacheStore>(className);
+                ICacheStore store;
+
+                if (factory != null)
+                    store = factory.CreateInstance();
+                else
+                {
+                    var className = reader.ReadString();
+                    var propertyMap = reader.ReadDictionaryAsGeneric<string, object>();
+
+                    store = IgniteUtils.CreateInstance<ICacheStore>(className);
+
+                    IgniteUtils.SetProperties(store, propertyMap);
+                }
 
-                IgniteUtils.SetProperties(store, propertyMap);
 
                 return new CacheStore(store, convertBinary, registry);
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
index ffc8be8..9d27117 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
@@ -25,6 +25,7 @@ namespace Apache.Ignite.Core.Impl
     using System.Linq;
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache;
+    using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Cluster;
     using Apache.Ignite.Core.Compute;
     using Apache.Ignite.Core.Datastream;
@@ -339,12 +340,46 @@ namespace Apache.Ignite.Core.Impl
         }
 
         /** <inheritdoc /> */
+        public ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration)
+        {
+            IgniteArgumentCheck.NotNull(configuration, "configuration");
+
+            using (var stream = IgniteManager.Memory.Allocate().GetStream())
+            {
+                var writer = Marshaller.StartMarshal(stream);
+
+                configuration.Write(writer);
+
+                stream.SynchronizeOutput();
+
+                return Cache<TK, TV>(UU.ProcessorGetOrCreateCache(_proc, stream.MemoryPointer));
+            }
+        }
+
+        /** <inheritdoc /> */
         public ICache<TK, TV> CreateCache<TK, TV>(string name)
         {
             return Cache<TK, TV>(UU.ProcessorCreateCache(_proc, name));
         }
 
         /** <inheritdoc /> */
+        public ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration)
+        {
+            IgniteArgumentCheck.NotNull(configuration, "configuration");
+
+            using (var stream = IgniteManager.Memory.Allocate().GetStream())
+            {
+                var writer = Marshaller.StartMarshal(stream);
+
+                configuration.Write(writer);
+
+                stream.SynchronizeOutput();
+
+                return Cache<TK, TV>(UU.ProcessorCreateCache(_proc, stream.MemoryPointer));
+            }
+        }
+
+        /** <inheritdoc /> */
         public void DestroyCache(string name)
         {
             UU.ProcessorDestroyCache(_proc, name);
@@ -450,6 +485,19 @@ namespace Apache.Ignite.Core.Impl
             return new AtomicLong(nativeLong, Marshaller, name);
         }
 
+        /** <inheritdoc /> */
+        public IgniteConfiguration GetConfiguration()
+        {
+            using (var stream = IgniteManager.Memory.Allocate(1024).GetStream())
+            {
+                UU.ProcessorGetIgniteConfiguration(_proc, stream.MemoryPointer);
+
+                stream.SynchronizeInput();
+
+                return new IgniteConfiguration(_marsh.StartUnmarshal(stream));
+            }
+        }
+
         /// <summary>
         /// Gets internal projection.
         /// </summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteConfigurationEx.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteConfigurationEx.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteConfigurationEx.cs
deleted file mode 100644
index 358e805..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteConfigurationEx.cs
+++ /dev/null
@@ -1,57 +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
-{
-    /// <summary>
-    /// Internal extensions for IgniteConfiguration.
-    /// </summary>
-    internal class IgniteConfigurationEx : IgniteConfiguration
-    {
-        /// <summary>
-        /// Default constructor.
-        /// </summary>
-        public IgniteConfigurationEx()
-        {
-            // No-op.
-        }
-
-        /// <summary>
-        /// Copying constructor.
-        /// </summary>
-        /// <param name="cfg">Configuration.</param>
-        public IgniteConfigurationEx(IgniteConfiguration cfg) : base(cfg)
-        {
-            // No-op.
-        }
-
-        /// <summary>
-        /// Copying constructor.
-        /// </summary>
-        /// <param name="cfg">Configuration.</param>
-        public IgniteConfigurationEx(IgniteConfigurationEx cfg)
-            : this((IgniteConfiguration) cfg)
-        {
-            GridName = cfg.GridName;
-        }
-
-        /// <summary>
-        /// Grid name which is used if not provided in configuration file.
-        /// </summary>
-        public string GridName { get; set; }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs
index 6803772..a61edf4 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs
@@ -50,7 +50,7 @@ namespace Apache.Ignite.Core.Impl
         private static JvmConfiguration _jvmCfg;
 
         /** Memory manager. */
-        private static PlatformMemoryManager _mem;
+        private static readonly PlatformMemoryManager Mem = new PlatformMemoryManager(1024);
 
         /// <summary>
         /// Create JVM.
@@ -86,7 +86,6 @@ namespace Apache.Ignite.Core.Impl
                 {
                     _ctx = ctx;
                     _jvmCfg = jvmCfg;
-                    _mem = new PlatformMemoryManager(1024);
                 }
             }
         }
@@ -96,7 +95,7 @@ namespace Apache.Ignite.Core.Impl
         /// </summary>
         internal static PlatformMemoryManager Memory
         {
-            get { return _mem; }
+            get { return Mem; }
         }
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs
index 16062e2..46bc3ca 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs
@@ -22,6 +22,7 @@ namespace Apache.Ignite.Core.Impl
     using System.Diagnostics.CodeAnalysis;
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache;
+    using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Cluster;
     using Apache.Ignite.Core.Compute;
     using Apache.Ignite.Core.Datastream;
@@ -232,19 +233,28 @@ namespace Apache.Ignite.Core.Impl
         }
 
         /** <inheritdoc /> */
+        public ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration)
+        {
+            return _ignite.GetOrCreateCache<TK, TV>(configuration);
+        }
+
+        /** <inheritdoc /> */
         public ICache<TK, TV> CreateCache<TK, TV>(string name)
         {
             return _ignite.CreateCache<TK, TV>(name);
         }
 
         /** <inheritdoc /> */
+        public ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration)
+        {
+            return _ignite.CreateCache<TK, TV>(configuration);
+        }
         public void DestroyCache(string name)
         {
             _ignite.DestroyCache(name);
         }
 
         /** <inheritdoc /> */
-
         public IClusterNode GetLocalNode()
         {
             return _ignite.GetCluster().GetLocalNode();
@@ -324,6 +334,12 @@ namespace Apache.Ignite.Core.Impl
         }
 
         /** <inheritdoc /> */
+        public IgniteConfiguration GetConfiguration()
+        {
+            return _ignite.GetConfiguration();
+        }
+
+        /** <inheritdoc /> */
         public void WriteBinary(IBinaryWriter writer)
         {
             // No-op.

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
index fe4548c..3206fc8 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
@@ -47,7 +47,7 @@ namespace Apache.Ignite.Core.Impl
         private static readonly string[] JvmDllLookupPaths = {@"jre\bin\server", @"jre\bin\default"};
 
         /** File: jvm.dll. */
-        private const string FileJvmDll = "jvm.dll";
+        internal const string FileJvmDll = "jvm.dll";
 
         /** File: Ignite.Common.dll. */
         internal const string FileIgniteJniDll = "ignite.common.dll";

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformRawMemory.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformRawMemory.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformRawMemory.cs
index 851d24f..8e54261 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformRawMemory.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformRawMemory.cs
@@ -85,7 +85,7 @@ namespace Apache.Ignite.Core.Impl.Memory
         /** <inheritdoc /> */
         public void Release()
         {
-            throw new NotSupportedException();
+            // Memory can only be released by native platform.
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
index 229ff8c..51a49d0 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
@@ -70,7 +70,7 @@ namespace Apache.Ignite.Core.Impl.Transactions
 
                 concurrency = (TransactionConcurrency) reader.ReadInt();
                 isolation = (TransactionIsolation) reader.ReadInt();
-                timeout = TimeSpan.FromMilliseconds(reader.ReadLong());
+                timeout = reader.ReadLongAsTimespan();
             });
 
             _dfltConcurrency = concurrency;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs
index 7a73bee..17df94a 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs
@@ -24,7 +24,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
     /// Ignite JNI native methods.
     /// </summary>
     [SuppressUnmanagedCodeSecurity]
-    internal unsafe static class IgniteJniNativeMethods
+    internal static unsafe class IgniteJniNativeMethods
     {
         [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteReallocate")]
         public static extern int Reallocate(long memPtr, int cap);
@@ -52,9 +52,15 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorCreateCache")]
         public static extern void* ProcessorCreateCache(void* ctx, void* obj, sbyte* name);
 
+        [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorCreateCacheFromConfig")]
+        public static extern void* ProcessorCreateCacheFromConfig(void* ctx, void* obj, long memPtr);
+
         [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorGetOrCreateCache")]
         public static extern void* ProcessorGetOrCreateCache(void* ctx, void* obj, sbyte* name);
 
+        [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorGetOrCreateCacheFromConfig")]
+        public static extern void* ProcessorGetOrCreateCacheFromConfig(void* ctx, void* obj, long memPtr);
+
         [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorDestroyCache")]
         public static extern void ProcessorDestroyCache(void* ctx, void* obj, sbyte* name);
 
@@ -87,6 +93,9 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         public static extern void* ProcessorAtomicLong(void* ctx, void* obj, sbyte* name, long initVal,
             [MarshalAs(UnmanagedType.U1)] bool create);
 
+        [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorGetIgniteConfiguration")]
+        public static extern void ProcessorGetIgniteConfiguration(void* ctx, void* obj, long memPtr);
+
         [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteTargetInStreamOutLong")]
         public static extern long TargetInStreamOutLong(void* ctx, void* target, int opType, long memPtr);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/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 f460c9f..ad62f38 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs
@@ -21,7 +21,6 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
     using System.Diagnostics.CodeAnalysis;
     using System.Runtime.InteropServices;
     using Apache.Ignite.Core.Common;
-
     using JNI = IgniteJniNativeMethods;
 
     /// <summary>
@@ -102,7 +101,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         {
             JNI.IgnitionStopAll(ctx, cancel);
         }
-        
+
         internal static void ProcessorReleaseStart(IUnmanagedTarget target)
         {
             JNI.ProcessorReleaseStart(target.Context, target.Target);
@@ -147,6 +146,13 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             }
         }
 
+        internal static IUnmanagedTarget ProcessorCreateCache(IUnmanagedTarget target, long memPtr)
+        {
+            void* res = JNI.ProcessorCreateCacheFromConfig(target.Context, target.Target, memPtr);
+
+            return target.ChangeTarget(res);
+        }
+
         internal static IUnmanagedTarget ProcessorGetOrCreateCache(IUnmanagedTarget target, string name)
         {
             sbyte* name0 = IgniteUtils.StringToUtf8Unmanaged(name);
@@ -163,6 +169,13 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             }
         }
 
+        internal static IUnmanagedTarget ProcessorGetOrCreateCache(IUnmanagedTarget target, long memPtr)
+        {
+            void* res = JNI.ProcessorGetOrCreateCacheFromConfig(target.Context, target.Target, memPtr);
+
+            return target.ChangeTarget(res);
+        }
+
         internal static void ProcessorDestroyCache(IUnmanagedTarget target, string name)
         {
             sbyte* name0 = IgniteUtils.StringToUtf8Unmanaged(name);
@@ -268,6 +281,11 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             }
         }
 
+        internal static void ProcessorGetIgniteConfiguration(IUnmanagedTarget target, long memPtr)
+        {
+            JNI.ProcessorGetIgniteConfiguration(target.Context, target.Target, memPtr);
+        }
+
         #endregion
 
         #region NATIVE METHODS: TARGET

http://git-wip-us.apache.org/repos/asf/ignite/blob/ee20f1d9/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index c0f49c8..53eefdd 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -837,6 +837,7 @@
                                         <exclude>**/*.slnrel</exclude>
                                         <exclude>**/*.DotSettings</exclude>
                                         <exclude>**/*.FxCop</exclude>
+                                        <exclude>**/*.ruleset</exclude>
                                         <exclude>**/*.csproj</exclude>
                                         <exclude>**/*.csprojrel</exclude>
                                         <exclude>**/*.vcxproj</exclude>