You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/09/21 16:27:23 UTC
[27/52] [partial] ignite git commit: IGNITE-1513: Moved .Net.
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Services/IServices.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Services/IServices.cs b/modules/platform/dotnet/Apache.Ignite.Core/Services/IServices.cs
new file mode 100644
index 0000000..fff25c3
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Services/IServices.cs
@@ -0,0 +1,181 @@
+/*
+ * 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.Services
+{
+ using System.Collections.Generic;
+ using Apache.Ignite.Core.Cluster;
+ using Apache.Ignite.Core.Common;
+
+ /// <summary>
+ /// Defines functionality to deploy distributed services in the Ignite.
+ /// </summary>
+ public interface IServices : IAsyncSupport<IServices>
+ {
+ /// <summary>
+ /// Gets the cluster group to which this instance belongs.
+ /// </summary>
+ /// <value>
+ /// The cluster group to which this instance belongs.
+ /// </value>
+ IClusterGroup ClusterGroup { get; }
+
+ /// <summary>
+ /// Deploys a cluster-wide singleton service. Ignite guarantees that there is always
+ /// one instance of the service in the cluster. In case if Ignite node on which the service
+ /// was deployed crashes or stops, Ignite will automatically redeploy it on another node.
+ /// However, if the node on which the service is deployed remains in topology, then the
+ /// service will always be deployed on that node only, regardless of topology changes.
+ /// <para />
+ /// Note that in case of topology changes, due to network delays, there may be a temporary situation
+ /// when a singleton service instance will be active on more than one node (e.g. crash detection delay).
+ /// </summary>
+ /// <param name="name">Service name.</param>
+ /// <param name="service">Service instance.</param>
+ [AsyncSupported]
+ void DeployClusterSingleton(string name, IService service);
+
+ /// <summary>
+ /// Deploys a per-node singleton service. Ignite guarantees that there is always
+ /// one instance of the service running on each node. Whenever new nodes are started
+ /// within the underlying cluster group, Ignite will automatically deploy one instance of
+ /// the service on every new node.
+ /// </summary>
+ /// <param name="name">Service name.</param>
+ /// <param name="service">Service instance.</param>
+ [AsyncSupported]
+ void DeployNodeSingleton(string name, IService service);
+
+ /// <summary>
+ /// Deploys one instance of this service on the primary node for a given affinity key.
+ /// Whenever topology changes and primary node assignment changes, Ignite will always
+ /// make sure that the service is undeployed on the previous primary node and deployed
+ /// on the new primary node.
+ /// <para />
+ /// Note that in case of topology changes, due to network delays, there may be a temporary situation
+ /// when a service instance will be active on more than one node (e.g. crash detection delay).
+ /// </summary>
+ /// <param name="name">Service name.</param>
+ /// <param name="service">Service instance.</param>
+ /// <param name="cacheName">Name of the cache on which affinity for key should be calculated, null for
+ /// default cache.</param>
+ /// <param name="affinityKey">Affinity cache key.</param>
+ [AsyncSupported]
+ void DeployKeyAffinitySingleton<TK>(string name, IService service, string cacheName, TK affinityKey);
+
+ /// <summary>
+ /// Deploys multiple instances of the service on the grid. Ignite will deploy a
+ /// maximum amount of services equal to <paramref name="totalCount" /> parameter making sure that
+ /// there are no more than <paramref name="maxPerNodeCount" /> service instances running
+ /// on each node. Whenever topology changes, Ignite will automatically rebalance
+ /// the deployed services within cluster to make sure that each node will end up with
+ /// about equal number of deployed instances whenever possible.
+ /// </summary>
+ /// <param name="name">Service name.</param>
+ /// <param name="service">Service instance.</param>
+ /// <param name="totalCount">Maximum number of deployed services in the grid, 0 for unlimited.</param>
+ /// <param name="maxPerNodeCount">Maximum number of deployed services on each node, 0 for unlimited.</param>
+ [AsyncSupported]
+ void DeployMultiple(string name, IService service, int totalCount, int maxPerNodeCount);
+
+ /// <summary>
+ /// Deploys instances of the service in the Ignite according to provided configuration.
+ /// </summary>
+ /// <param name="configuration">Service configuration.</param>
+ [AsyncSupported]
+ void Deploy(ServiceConfiguration configuration);
+
+ /// <summary>
+ /// Cancels service deployment. If a service with specified name was deployed on the grid,
+ /// then <see cref="IService.Cancel"/> method will be called on it.
+ /// <para/>
+ /// Note that Ignite cannot guarantee that the service exits from <see cref="IService.Execute"/>
+ /// method whenever <see cref="IService.Cancel"/> is called. It is up to the user to
+ /// make sure that the service code properly reacts to cancellations.
+ /// </summary>
+ /// <param name="name">Name of the service to cancel.</param>
+ [AsyncSupported]
+ void Cancel(string name);
+
+ /// <summary>
+ /// Cancels all deployed services.
+ /// <para/>
+ /// Note that depending on user logic, it may still take extra time for a service to
+ /// finish execution, even after it was cancelled.
+ /// </summary>
+ [AsyncSupported]
+ void CancelAll();
+
+ /// <summary>
+ /// Gets metadata about all deployed services.
+ /// </summary>
+ /// <returns>Metadata about all deployed services.</returns>
+ ICollection<IServiceDescriptor> GetServiceDescriptors();
+
+ /// <summary>
+ /// Gets deployed service with specified name.
+ /// </summary>
+ /// <typeparam name="T">Service type.</typeparam>
+ /// <param name="name">Service name.</param>
+ /// <returns>Deployed service with specified name.</returns>
+ T GetService<T>(string name);
+
+ /// <summary>
+ /// Gets all deployed services with specified name.
+ /// </summary>
+ /// <typeparam name="T">Service type.</typeparam>
+ /// <param name="name">Service name.</param>
+ /// <returns>All deployed services with specified name.</returns>
+ ICollection<T> GetServices<T>(string name);
+
+ /// <summary>
+ /// Gets a remote handle on the service. If service is available locally,
+ /// then local instance is returned, otherwise, a remote proxy is dynamically
+ /// created and provided for the specified service.
+ /// </summary>
+ /// <typeparam name="T">Service type.</typeparam>
+ /// <param name="name">Service name.</param>
+ /// <returns>Either proxy over remote service or local service if it is deployed locally.</returns>
+ T GetServiceProxy<T>(string name) where T : class;
+
+ /// <summary>
+ /// Gets a remote handle on the service. If service is available locally,
+ /// then local instance is returned, otherwise, a remote proxy is dynamically
+ /// created and provided for the specified service.
+ /// </summary>
+ /// <typeparam name="T">Service type.</typeparam>
+ /// <param name="name">Service name.</param>
+ /// <param name="sticky">Whether or not Ignite should always contact the same remote
+ /// service or try to load-balance between services.</param>
+ /// <returns>Either proxy over remote service or local service if it is deployed locally.</returns>
+ T GetServiceProxy<T>(string name, bool sticky) where T : class;
+
+ /// <summary>
+ /// Returns an instance with portable mode enabled.
+ /// Service method results will be kept in portable form.
+ /// </summary>
+ /// <returns>Instance with portable mode enabled.</returns>
+ IServices WithKeepPortable();
+
+ /// <summary>
+ /// Returns an instance with server-side portable mode enabled.
+ /// Service method arguments will be kept in portable form.
+ /// </summary>
+ /// <returns>Instance with server-side portable mode enabled.</returns>
+ IServices WithServerKeepPortable();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceConfiguration.cs b/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceConfiguration.cs
new file mode 100644
index 0000000..e91656f
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceConfiguration.cs
@@ -0,0 +1,62 @@
+/*
+ * 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.Services
+{
+ using Apache.Ignite.Core.Cluster;
+
+ /// <summary>
+ /// Service configuration.
+ /// </summary>
+ public class ServiceConfiguration
+ {
+ /// <summary>
+ /// Gets or sets the service name.
+ /// </summary>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or sets the service instance.
+ /// </summary>
+ public IService Service { get; set; }
+
+ /// <summary>
+ /// Gets or sets the total number of deployed service instances in the cluster, 0 for unlimited.
+ /// </summary>
+ public int TotalCount { get; set; }
+
+ /// <summary>
+ /// Gets or sets maximum number of deployed service instances on each node, 0 for unlimited.
+ /// </summary>
+ public int MaxPerNodeCount { get; set; }
+
+ /// <summary>
+ /// Gets or sets cache name used for key-to-node affinity calculation.
+ /// </summary>
+ public string CacheName { get; set; }
+
+ /// <summary>
+ /// Gets or sets affinity key used for key-to-node affinity calculation.
+ /// </summary>
+ public object AffinityKey { get; set; }
+
+ /// <summary>
+ /// Gets or sets node filter used to filter nodes on which the service will be deployed.
+ /// </summary>
+ public IClusterNodeFilter NodeFilter { get; set; }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceInvocationException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceInvocationException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceInvocationException.cs
new file mode 100644
index 0000000..fe83cbc
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceInvocationException.cs
@@ -0,0 +1,101 @@
+/*
+ * 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.Services
+{
+ using System;
+ using System.Runtime.Serialization;
+ using Apache.Ignite.Core.Common;
+ using Apache.Ignite.Core.Portable;
+
+ /// <summary>
+ /// Indicates an error during Grid Services invocation.
+ /// </summary>
+ [Serializable]
+ public class ServiceInvocationException : IgniteException
+ {
+ /** Serializer key. */
+ private const string KeyPortableCause = "PortableCause";
+
+ /** Cause. */
+ private readonly IPortableObject _portableCause;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ServiceInvocationException"/> class.
+ /// </summary>
+ public ServiceInvocationException()
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ServiceInvocationException"/> class.
+ /// </summary>
+ /// <param name="message">The message that describes the error.</param>
+ public ServiceInvocationException(string message) : base(message)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ServiceInvocationException"/> class.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="cause">The cause.</param>
+ public ServiceInvocationException(string message, Exception cause) : base(message, cause)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ServiceInvocationException"/> class.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="portableCause">The portable cause.</param>
+ public ServiceInvocationException(string message, IPortableObject portableCause)
+ :base(message)
+ {
+ _portableCause = portableCause;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="IgniteException"/> class.
+ /// </summary>
+ /// <param name="info">Serialization information.</param>
+ /// <param name="ctx">Streaming context.</param>
+ protected ServiceInvocationException(SerializationInfo info, StreamingContext ctx)
+ : base(info, ctx)
+ {
+ _portableCause = (IPortableObject) info.GetValue(KeyPortableCause, typeof (IPortableObject));
+ }
+
+ /// <summary>
+ /// Gets the portable cause.
+ /// </summary>
+ public IPortableObject PortableCause
+ {
+ get { return _portableCause; }
+ }
+
+ /** <inheritdoc /> */
+ public override void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ info.AddValue(KeyPortableCause, _portableCause);
+
+ base.GetObjectData(info, context);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
new file mode 100644
index 0000000..e85d577
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
@@ -0,0 +1,230 @@
+/*
+ * 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.Transactions
+{
+ using System;
+ using System.Collections.Generic;
+ using Apache.Ignite.Core.Common;
+
+ /// <summary>
+ /// Grid cache transaction.
+ /// <para />
+ /// Cache transactions support the following isolation levels:
+ /// <list type="bullet">
+ /// <item>
+ /// <description><see cref="TransactionIsolation.ReadCommitted"/> isolation level
+ /// means that always a committed value will be provided for read operations. With this isolation
+ /// level values are always read from cache global memory or persistent store every time a value
+ /// is accessed. In other words, if the same key is accessed more than once within the same transaction,
+ /// it may have different value every time since global cache memory may be updated concurrently by
+ /// other threads.</description>
+ /// </item>
+ /// <item>
+ /// <description><see cref="TransactionIsolation.RepeatableRead"/> isolation level
+ /// means that if a value was read once within transaction, then all consecutive reads will provide
+ /// the same in-transaction value. With this isolation level accessed values are stored within
+ /// in-transaction memory, so consecutive access to the same key within the same transaction will always
+ /// return the value that was previously read or updated within this transaction. If concurrency is
+ /// <see cref="TransactionConcurrency.Pessimistic"/>, then a lock on the key will be
+ /// acquired prior to accessing the value.</description>
+ /// </item>
+ /// <item>
+ /// <description><see cref="TransactionIsolation.Serializable"/> isolation level means
+ /// that all transactions occur in a completely isolated fashion, as if all transactions in the system
+ /// had executed serially, one after the other. Read access with this level happens the same way as with
+ /// <see cref="TransactionIsolation.RepeatableRead"/> level. However, in
+ /// <see cref="TransactionConcurrency.Optimistic"/> mode, if some transactions cannot be
+ /// serially isolated from each other, then one winner will be picked and the other transactions in
+ /// conflict will result in <c>TransactionOptimisticException</c> being thrown on Java side.</description>
+ /// </item>
+ /// </list>
+ /// Cache transactions support the following concurrency models:
+ /// <list type="bullet">
+ /// <item>
+ /// <description><see cref="TransactionConcurrency.Optimistic"/> - in this mode all cache
+ /// operations
+ /// are not distributed to other nodes until <see cref="ITransaction.Commit()"/>.
+ /// In this mode one <c>PREPARE</c> message will
+ /// be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes
+ /// reply <c>OK</c> (i.e. <c>Phase 1</c> completes successfully), a one-way <c>COMMIT</c> message is sent
+ /// without waiting for reply. If it is necessary to know whenever remote nodes have committed as well,
+ /// synchronous commit or synchronous rollback should be enabled via
+ /// <c>CacheConfiguration.setWriteSynchronizationMode</c>.
+ /// <para />
+ /// Note that in this mode, optimistic failures are only possible in conjunction with
+ /// <see cref="TransactionIsolation.Serializable"/> isolation level. In all other cases,
+ /// optimistic transactions will never fail optimistically and will always be identically ordered on all
+ /// participating Ignite nodes.</description>
+ /// </item>
+ /// <item>
+ /// <description><see cref="TransactionConcurrency.Pessimistic"/> - in this mode a lock is
+ /// acquired on all cache operations with exception of read operations in
+ /// <see cref="TransactionIsolation.ReadCommitted"/> mode. All optional filters passed
+ /// into cache operations will be evaluated after successful lock acquisition. Whenever
+ /// <see cref="ITransaction.Commit()"/> is called, a single one-way <c>COMMIT</c>
+ /// message is sent to participating cache nodes without waiting for reply. Note that there is no reason
+ /// for distributed <c>PREPARE</c> step, as all locks have been already acquired. Just like with
+ /// optimistic mode, it is possible to configure synchronous commit or rollback and wait till
+ /// transaction commits on all participating remote nodes.</description>
+ /// </item>
+ /// </list>
+ /// <para />
+ /// In addition to standard <c>CacheAtomicityMode.TRANSACTIONAL</c> behavior, Ignite also supports
+ /// a lighter <c>CacheAtomicityMode.ATOMIC</c> mode as well. In this mode distributed transactions
+ /// and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher
+ /// performance and throughput ratios. It is recommended that <c>CacheAtomicityMode.TRANSACTIONAL</c> mode
+ /// is used whenever full <c>ACID</c>-compliant transactions are not needed.
+ /// <example>
+ /// You can use cache transactions as follows:
+ /// <code>
+ /// ICacheTx tx = cache.TxStart();
+ ///
+ /// try
+ /// {
+ /// int v1 = cache<string, int>.Get("k1");
+ ///
+ /// // Check if v1 satisfies some condition before doing a put.
+ /// if (v1 > 0)
+ /// cache.Put<string, int>("k1", 2);
+ ///
+ /// cache.Removex("k2);
+ ///
+ /// // Commit the transaction.
+ /// tx.Commit();
+ /// }
+ /// finally
+ /// {
+ /// tx.Dispose();
+ /// }
+ ///
+ /// </code>
+ /// </example>
+ /// </summary>
+ public interface ITransaction : IDisposable, IAsyncSupport<ITransaction>
+ {
+ /// <summary>
+ /// ID of the node on which this transaction started.
+ /// </summary>
+ /// <value>
+ /// Originating node ID.
+ /// </value>
+ Guid NodeId { get; }
+
+ /// <summary>
+ /// ID of the thread in which this transaction started.
+ /// </summary>
+ long ThreadId
+ {
+ get;
+ }
+
+ /// <summary>
+ /// Start time of this transaction on this node.
+ /// </summary>
+ DateTime StartTime
+ {
+ get;
+ }
+
+ /// <summary>
+ /// Transaction isolation level.
+ /// </summary>
+ TransactionIsolation Isolation
+ {
+ get;
+ }
+
+ /// <summary>
+ /// Transaction concurrency mode.
+ /// </summary>
+ TransactionConcurrency Concurrency
+ {
+ get;
+ }
+
+ /// <summary>
+ /// Current transaction state.
+ /// </summary>
+ TransactionState State
+ {
+ get;
+ }
+
+ /// <summary>
+ /// Timeout value in milliseconds for this transaction. If transaction times
+ /// out prior to it's completion, an exception will be thrown.
+ /// </summary>
+ TimeSpan Timeout
+ {
+ get;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether this transaction was marked as rollback-only.
+ /// </summary>
+ bool IsRollbackOnly
+ {
+ get;
+ }
+
+ /// <summary>
+ /// Modify the transaction associated with the current thread such that the
+ /// only possible outcome of the transaction is to roll back the transaction.
+ /// </summary>
+ /// <returns>
+ /// True if rollback-only flag was set as a result of this operation,
+ /// false if it was already set prior to this call or could not be set
+ /// because transaction is already finishing up committing or rolling back.
+ /// </returns>
+ bool SetRollbackonly();
+
+ /// <summary>
+ /// Commits this transaction.
+ /// </summary>
+ [AsyncSupported]
+ void Commit();
+
+ /// <summary>
+ /// Rolls back this transaction.
+ /// </summary>
+ [AsyncSupported]
+ void Rollback();
+
+ /// <summary>
+ /// Adds a new metadata.
+ /// </summary>
+ /// <param name="name">Metadata name.</param>
+ /// <param name="val">Metadata value.</param>
+ void AddMeta<TV>(string name, TV val);
+
+ /// <summary>
+ /// Gets metadata by name.
+ /// </summary>
+ /// <param name="name">Metadata name.</param>
+ /// <returns>Metadata value.</returns>
+ /// <exception cref="KeyNotFoundException">If metadata key was not found.</exception>
+ TV Meta<TV>(string name);
+
+ /// <summary>
+ /// Removes metadata by name.
+ /// </summary>
+ /// <param name="name">Metadata name.</param>
+ /// <returns>Value of removed metadata or default value for <code>V</code> type.</returns>
+ TV RemoveMeta<TV>(string name);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactionMetrics.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactionMetrics.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactionMetrics.cs
new file mode 100644
index 0000000..565dd34
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactionMetrics.cs
@@ -0,0 +1,47 @@
+/*
+ * 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.Transactions
+{
+ using System;
+
+ /// <summary>
+ /// Transaction metrics, shared across all caches.
+ /// </summary>
+ public interface ITransactionMetrics
+ {
+ /// <summary>
+ /// Gets the last time transaction was committed.
+ /// </summary>
+ DateTime CommitTime { get; }
+
+ /// <summary>
+ /// Gets the last time transaction was rolled back.
+ /// </summary>
+ DateTime RollbackTime { get; }
+
+ /// <summary>
+ /// Gets the total number of transaction commits.
+ /// </summary>
+ int TxCommits { get; }
+
+ /// <summary>
+ /// Gets the total number of transaction rollbacks.
+ /// </summary>
+ int TxRollbacks { get; }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactions.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactions.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactions.cs
new file mode 100644
index 0000000..83f12a5
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactions.cs
@@ -0,0 +1,73 @@
+/*
+ * 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.Transactions
+{
+ using System;
+
+ /// <summary>
+ /// Transactions facade.
+ /// <para/>
+ /// All members are thread-safe and may be used concurrently from multiple threads.
+ /// </summary>
+ public interface ITransactions
+ {
+ /// <summary>
+ /// Starts a transaction with default isolation, concurrency, timeout, and invalidation policy.
+ /// All defaults are set in CacheConfiguration at startup.
+ /// </summary>
+ /// <returns>New transaction.</returns>
+ ITransaction TxStart();
+
+ /// <summary>
+ /// Starts new transaction with the specified concurrency and isolation.
+ /// </summary>
+ /// <param name="concurrency">Concurrency.</param>
+ /// <param name="isolation">Isolation.</param>
+ /// <returns>New transaction.</returns>
+ ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation);
+
+ /// <summary>
+ /// Starts new transaction with the specified concurrency and isolation.
+ /// </summary>
+ /// <param name="concurrency">Concurrency.</param>
+ /// <param name="isolation">Isolation.</param>
+ /// <param name="timeout">Timeout.</param>
+ /// <param name="txSize">Number of entries participating in transaction (may be approximate).</param>
+ /// <returns>New transaction.</returns>
+ ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation,
+ TimeSpan timeout, int txSize);
+
+ /// <summary>
+ /// Gets transaction started by this thread or null if this thread does not have a transaction.
+ /// </summary>
+ /// <value>
+ /// Transaction started by this thread or null if this thread does not have a transaction.
+ /// </value>
+ ITransaction Tx { get; }
+
+ /// <summary>
+ /// Gets the metrics.
+ /// </summary>
+ ITransactionMetrics GetMetrics();
+
+ /// <summary>
+ /// Resets the metrics.
+ /// </summary>
+ void ResetMetrics();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionConcurrency.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionConcurrency.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionConcurrency.cs
new file mode 100644
index 0000000..4025607
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionConcurrency.cs
@@ -0,0 +1,36 @@
+/*
+ * 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.Transactions
+{
+ /// <summary>
+ /// Transaction concurrency control. See <see cref="ITransaction"/> for more
+ /// information on transaction concurrency controls.
+ /// </summary>
+ public enum TransactionConcurrency
+ {
+ /// <summary>
+ /// Optimistic concurrency control.
+ /// </summary>
+ Optimistic = 0,
+
+ /// <summary>
+ /// Pessimistic concurrency control.
+ /// </summary>
+ Pessimistic = 1
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionHeuristicException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionHeuristicException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionHeuristicException.cs
new file mode 100644
index 0000000..cb46902
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionHeuristicException.cs
@@ -0,0 +1,72 @@
+/*
+ * 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.Transactions
+{
+ using System;
+ using System.Runtime.Serialization;
+ using Apache.Ignite.Core.Common;
+
+ /// <summary>
+ /// Exception thrown whenever Ignite transaction enters an unknown state.
+ /// This exception is usually thrown whenever commit partially succeeds.
+ /// Cache will still resolve this situation automatically to ensure data
+ /// integrity, by invalidating all values participating in this transaction
+ /// on remote nodes.
+ /// </summary>
+ [Serializable]
+ public class TransactionHeuristicException : IgniteException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionHeuristicException"/> class.
+ /// </summary>
+ public TransactionHeuristicException()
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionHeuristicException"/> class.
+ /// </summary>
+ /// <param name="message">The message that describes the error.</param>
+ public TransactionHeuristicException(string message) : base(message)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionHeuristicException"/> class.
+ /// </summary>
+ /// <param name="info">Serialization information.</param>
+ /// <param name="ctx">Streaming context.</param>
+ protected TransactionHeuristicException(SerializationInfo info, StreamingContext ctx)
+ : base(info, ctx)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionHeuristicException"/> class.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="cause">The cause.</param>
+ public TransactionHeuristicException(string message, Exception cause) : base(message, cause)
+ {
+ // No-op.
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionIsolation.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionIsolation.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionIsolation.cs
new file mode 100644
index 0000000..2a7723f
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionIsolation.cs
@@ -0,0 +1,41 @@
+/*
+ * 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.Transactions
+{
+ /// <summary>
+ /// Defines different cache transaction isolation levels. See <see cref="ITransaction"/>
+ /// documentation for more information about cache transaction isolation levels.
+ /// </summary>
+ public enum TransactionIsolation
+ {
+ /// <summary>
+ /// Read committed isolation level.
+ /// </summary>
+ ReadCommitted = 0,
+
+ /// <summary>
+ /// Repeatable read isolation level.
+ /// </summary>
+ RepeatableRead = 1,
+
+ /// <summary>
+ /// Serializable isolation level.
+ /// </summary>
+ Serializable = 2
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionOptimisticException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionOptimisticException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionOptimisticException.cs
new file mode 100644
index 0000000..2b64370
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionOptimisticException.cs
@@ -0,0 +1,69 @@
+/*
+ * 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.Transactions
+{
+ using System;
+ using System.Runtime.Serialization;
+ using Apache.Ignite.Core.Common;
+
+ /// <summary>
+ /// Exception thrown whenever Ignite transactions fail optimistically.
+ /// </summary>
+ [Serializable]
+ public class TransactionOptimisticException : IgniteException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionOptimisticException"/> class.
+ /// </summary>
+ public TransactionOptimisticException()
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionOptimisticException"/> class.
+ /// </summary>
+ /// <param name="message">The message that describes the error.</param>
+ public TransactionOptimisticException(string message) : base(message)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionOptimisticException"/> class.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="cause">The cause.</param>
+ public TransactionOptimisticException(string message, Exception cause)
+ : base(message, cause)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionOptimisticException"/> class.
+ /// </summary>
+ /// <param name="info">Serialization information.</param>
+ /// <param name="ctx">Streaming context.</param>
+ protected TransactionOptimisticException(SerializationInfo info, StreamingContext ctx)
+ : base(info, ctx)
+ {
+ // No-op.
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionRollbackException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionRollbackException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionRollbackException.cs
new file mode 100644
index 0000000..c1f25c8
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionRollbackException.cs
@@ -0,0 +1,68 @@
+/*
+ * 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.Transactions
+{
+ using System;
+ using System.Runtime.Serialization;
+ using Apache.Ignite.Core.Common;
+
+ /// <summary>
+ /// Exception thrown whenever Ignite transactions has been automatically rolled back.
+ /// </summary>
+ [Serializable]
+ public class TransactionRollbackException : IgniteException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionRollbackException"/> class.
+ /// </summary>
+ public TransactionRollbackException()
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionRollbackException"/> class.
+ /// </summary>
+ /// <param name="message">The message that describes the error.</param>
+ public TransactionRollbackException(string message) : base(message)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionRollbackException"/> class.
+ /// </summary>
+ /// <param name="info">Serialization information.</param>
+ /// <param name="ctx">Streaming context.</param>
+ protected TransactionRollbackException(SerializationInfo info, StreamingContext ctx)
+ : base(info, ctx)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionRollbackException"/> class.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="cause">The cause.</param>
+ public TransactionRollbackException(string message, Exception cause) : base(message, cause)
+ {
+ // No-op.
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionState.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionState.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionState.cs
new file mode 100644
index 0000000..eecf72b
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionState.cs
@@ -0,0 +1,70 @@
+/*
+ * 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.Transactions
+{
+ /// <summary>
+ /// Cache transaction state.
+ /// </summary>
+ public enum TransactionState
+ {
+ /// <summary>
+ /// Transaction started.
+ /// </summary>
+ Active,
+
+ /// <summary>
+ /// Transaction validating.
+ /// </summary>
+ Preparing,
+
+ /// <summary>
+ /// Transaction validation succeeded.
+ /// </summary>
+ Prepared,
+
+ /// <summary>
+ /// Transaction is marked for rollback.
+ /// </summary>
+ MarkedRollback,
+
+ /// <summary>
+ /// Transaction commit started (validating finished).
+ /// </summary>
+ Committing,
+
+ /// <summary>
+ /// Transaction commit succeeded.
+ /// </summary>
+ Committed,
+
+ /// <summary>
+ /// Transaction rollback started (validation failed).
+ /// </summary>
+ RollingBack,
+
+ /// <summary>
+ /// Transaction rollback succeeded.
+ /// </summary>
+ RolledBack,
+
+ /// <summary>
+ /// Transaction rollback failed or is otherwise unknown state.
+ /// </summary>
+ Unknown
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionTimeoutException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionTimeoutException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionTimeoutException.cs
new file mode 100644
index 0000000..f1e492a
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionTimeoutException.cs
@@ -0,0 +1,69 @@
+/*
+ * 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.Transactions
+{
+ using System;
+ using System.Runtime.Serialization;
+ using Apache.Ignite.Core.Common;
+
+ /// <summary>
+ /// Exception thrown whenever Ignite transactions time out.
+ /// </summary>
+ [Serializable]
+ public class TransactionTimeoutException : IgniteException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionTimeoutException"/> class.
+ /// </summary>
+ public TransactionTimeoutException()
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionTimeoutException"/> class.
+ /// </summary>
+ /// <param name="message">The message that describes the error.</param>
+ public TransactionTimeoutException(string message)
+ : base(message)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionTimeoutException"/> class.
+ /// </summary>
+ /// <param name="info">Serialization information.</param>
+ /// <param name="ctx">Streaming context.</param>
+ protected TransactionTimeoutException(SerializationInfo info, StreamingContext ctx)
+ : base(info, ctx)
+ {
+ // No-op.
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TransactionTimeoutException"/> class.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="cause">The cause.</param>
+ public TransactionTimeoutException(string message, Exception cause) : base(message, cause)
+ {
+ // No-op.
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.sln
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.sln b/modules/platform/dotnet/Apache.Ignite.sln
new file mode 100644
index 0000000..ebde1a8
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.sln
@@ -0,0 +1,86 @@
+
+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}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core.Tests", "..\..\test\dotnet\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", "{4F7E4917-4612-4B96-9838-025711ADE391}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core.Tests.TestDll", "..\..\test\dotnet\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}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Examples", "Examples\Apache.Ignite.Examples\Apache.Ignite.Examples.csproj", "{069FA680-3C4D-43A9-B84F-E67513B87827}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.ExamplesDll", "Examples\Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj", "{DFB08363-202E-412D-8812-349EF10A8702}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {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|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|x64.ActiveCfg = Debug|x64
+ {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x64.Build.0 = Debug|x64
+ {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x86.ActiveCfg = Debug|x86
+ {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x86.Build.0 = Debug|x86
+ {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x64.ActiveCfg = Release|x64
+ {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x64.Build.0 = Release|x64
+ {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x86.ActiveCfg = Release|x86
+ {6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x86.Build.0 = Release|x86
+ {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|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
+ {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x64.ActiveCfg = Debug|x64
+ {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x64.Build.0 = Debug|x64
+ {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x86.ActiveCfg = Debug|x86
+ {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x86.Build.0 = Debug|x86
+ {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x64.ActiveCfg = Release|x64
+ {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x64.Build.0 = Release|x64
+ {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x86.ActiveCfg = Release|x86
+ {F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x86.Build.0 = Release|x86
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.ActiveCfg = Debug|x64
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.Build.0 = Debug|x64
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.ActiveCfg = Debug|x86
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.Build.0 = Debug|x86
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.ActiveCfg = Release|x64
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.Build.0 = Release|x64
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.ActiveCfg = Release|x86
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.Build.0 = Release|x86
+ {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x64.ActiveCfg = Debug|x64
+ {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x64.Build.0 = Debug|x64
+ {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x86.ActiveCfg = Debug|x86
+ {069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x86.Build.0 = Debug|x86
+ {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x64.ActiveCfg = Release|x64
+ {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x64.Build.0 = Release|x64
+ {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x86.ActiveCfg = Release|x86
+ {069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x86.Build.0 = Release|x86
+ {DFB08363-202E-412D-8812-349EF10A8702}.Debug|x64.ActiveCfg = Debug|x64
+ {DFB08363-202E-412D-8812-349EF10A8702}.Debug|x64.Build.0 = Debug|x64
+ {DFB08363-202E-412D-8812-349EF10A8702}.Debug|x86.ActiveCfg = Debug|x86
+ {DFB08363-202E-412D-8812-349EF10A8702}.Debug|x86.Build.0 = Debug|x86
+ {DFB08363-202E-412D-8812-349EF10A8702}.Release|x64.ActiveCfg = Release|x64
+ {DFB08363-202E-412D-8812-349EF10A8702}.Release|x64.Build.0 = Release|x64
+ {DFB08363-202E-412D-8812-349EF10A8702}.Release|x86.ActiveCfg = Release|x86
+ {DFB08363-202E-412D-8812-349EF10A8702}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.sln.DotSettings
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.sln.DotSettings b/modules/platform/dotnet/Apache.Ignite.sln.DotSettings
new file mode 100644
index 0000000..187a909
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.sln.DotSettings
@@ -0,0 +1,4 @@
+<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
+ <s:Boolean x:Key="/Default/CodeStyle/CSharpUsing/AddImportsToDeepestScope/@EntryValue">True</s:Boolean>
+
+ <s:Boolean x:Key="/Default/CodeStyle/CSharpUsing/QualifiedUsingAtNestedScope/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.slnrel
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.slnrel b/modules/platform/dotnet/Apache.Ignite.slnrel
new file mode 100644
index 0000000..0229623
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.slnrel
@@ -0,0 +1,43 @@
+
+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}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\cpp\src\common\project\vs\common.vcxproj", "{4F7E4917-4612-4B96-9838-025711ADE391}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite", "Apache.Ignite\Apache.Ignite.csproj", "{27F7F3C6-BDDE-43A9-B565-856F8395A04B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {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|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
+ {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|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
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.ActiveCfg = Debug|x64
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.Build.0 = Debug|x64
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.ActiveCfg = Debug|x86
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.Build.0 = Debug|x86
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.ActiveCfg = Release|x64
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.Build.0 = Release|x64
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.ActiveCfg = Release|x86
+ {27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csproj
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csproj b/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csproj
new file mode 100644
index 0000000..7f6db3a
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csproj
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{27F7F3C6-BDDE-43A9-B565-856F8395A04B}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Apache.Ignite</RootNamespace>
+ <AssemblyName>Apache.Ignite</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <PlatformTarget>x64</PlatformTarget>
+ <OutputPath>bin\x64\Debug\</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <PlatformTarget>x64</PlatformTarget>
+ <OutputPath>bin\x64\Release\</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+ <PlatformTarget>x86</PlatformTarget>
+ <OutputPath>bin\x86\Debug\</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+ <PlatformTarget>x86</PlatformTarget>
+ <OutputPath>bin\x86\Release\</OutputPath>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Configuration" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.ServiceProcess" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Config\AppSettingsConfigurator.cs" />
+ <Compile Include="Config\ArgsConfigurator.cs" />
+ <Compile Include="Config\ConfigValueParser.cs" />
+ <Compile Include="Config\IConfigurator.cs" />
+ <Compile Include="IgniteRunner.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Service\IgniteService.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="Service\NativeMethods.cs" />
+ <Compile Include="Service\ServiceDescription.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Apache.Ignite.Core\Apache.Ignite.Core.csproj">
+ <Project>{4cd2f726-7e2b-46c4-a5ba-057bb82eecb6}</Project>
+ <Name>Apache.Ignite.Core</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PostBuildEvent>copy $(TargetPath) $(SolutionDir)..\..\test\dotnet\Apache.Ignite.Core.Tests\$(OutDir)
+copy $(TargetPath).config $(SolutionDir)..\..\test\dotnet\Apache.Ignite.Core.Tests\$(OutDir)</PostBuildEvent>
+ </PropertyGroup>
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csprojrel
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csprojrel b/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csprojrel
new file mode 100644
index 0000000..0883660
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csprojrel
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{27F7F3C6-BDDE-43A9-B565-856F8395A04B}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Apache.Ignite</RootNamespace>
+ <AssemblyName>Apache.Ignite</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <PlatformTarget>x64</PlatformTarget>
+ <OutputPath>bin\x64\Debug\</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <PlatformTarget>x64</PlatformTarget>
+ <OutputPath>bin\x64\Release\</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+ <PlatformTarget>x86</PlatformTarget>
+ <OutputPath>bin\x86\Debug\</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+ <PlatformTarget>x86</PlatformTarget>
+ <OutputPath>bin\x86\Release\</OutputPath>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Configuration" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.ServiceProcess" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Config\AppSettingsConfigurator.cs" />
+ <Compile Include="Config\ArgsConfigurator.cs" />
+ <Compile Include="Config\ConfigValueParser.cs" />
+ <Compile Include="Config\IConfigurator.cs" />
+ <Compile Include="IgniteRunner.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Service\IgniteService.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="Service\NativeMethods.cs" />
+ <Compile Include="Service\ServiceDescription.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Apache.Ignite.Core\Apache.Ignite.Core.csproj">
+ <Project>{4cd2f726-7e2b-46c4-a5ba-057bb82eecb6}</Project>
+ <Name>Apache.Ignite.Core</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PostBuildEvent>
+ </PostBuildEvent>
+ </PropertyGroup>
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/App.config
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/App.config b/modules/platform/dotnet/Apache.Ignite/App.config
new file mode 100644
index 0000000..a9e8c39
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/App.config
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ 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.
+-->
+
+
+<!--
+ Apache Ignite .Net startup application configuration file.
+-->
+
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+ </startup>
+
+ <runtime>
+ <gcServer enabled="true" />
+ </runtime>
+
+ <appSettings>
+ <!-- Path to spring configuration file relative from IGNITE_HOME (if not provided "config/default-config.xml" is used) -->
+ <!-- <add key="Ignite.SpringConfigUrl" value="my-config.xml"/> -->
+
+ <!-- Absolute path to spring configuration file (if not provided "config/default-config.xml" is used) -->
+ <!-- <add key="Ignite.SpringConfigUrl" value="C:\my-dir\my-config.xml"/> -->
+
+ <!-- Path to Java library jvm.dll (if not provided JAVA_HOME environment variable is used to find jvm.dll) -->
+ <!-- <add key="Ignite.JvmDllPath" value="C:\Program Files\Java\jdk1.7.0_45\jre\bin\server\jvm.dll"/> -->
+
+ <!-- Additional classpath passed to JVM (enlist additional jar files here) -->
+ <!-- <add key="Ignite.JvmClasspath" value="c:\my-dir\my-lib1.jar;c:\my-dir\my-lib2.jar"/> -->
+
+ <!-- JVM Options passed to JVM -->
+ <!-- <add key="Ignite.JvmOption.1" value="-Xmx512m"/> -->
+ <!-- <add key="Ignite.JvmOption.2" value="-DIGNITE_QUIET=false"/> -->
+
+ <!-- Additional .Net assemblies to be loaded on startup. -->
+ <!-- <add key="Ignite.Assembly.1" value="System.Data.Linq,Culture=neutral,Version=1.0.0.0,PublicKeyToken=b77a5c561934e089"/> -->
+ <!-- <add key="Ignite.Assembly.2" value="my-assembly.dll"/> -->
+ </appSettings>
+
+</configuration>
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Config/AppSettingsConfigurator.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Config/AppSettingsConfigurator.cs b/modules/platform/dotnet/Apache.Ignite/Config/AppSettingsConfigurator.cs
new file mode 100644
index 0000000..b2e827e
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Config/AppSettingsConfigurator.cs
@@ -0,0 +1,113 @@
+/*
+ * 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.Config
+{
+ using System.Collections.Generic;
+ using System.Collections.Specialized;
+ using Apache.Ignite.Core;
+
+ /// <summary>
+ /// Configurator which uses application configuration.
+ /// </summary>
+ internal class AppSettingsConfigurator : IConfigurator<NameValueCollection>
+ {
+ /** Common configuration property prefix. */
+ private static readonly string CfgPrefix = "Ignite.".ToLower();
+
+ /** Configuration property: Ignite home. */
+ private static readonly string CfgHome = "Home".ToLower();
+
+ /** Configuration property: Spring config URL. */
+ private static readonly string CfgSpringCfgUrl = "SpringConfigUrl".ToLower();
+
+ /** Configuration property: Path to JVM dll. */
+ private static readonly string CfgJvmDll = "JvmDll".ToLower();
+
+ /** Configuration property: JVM classpath. */
+ private static readonly string CfgJvmClasspath = "JvmClasspath".ToLower();
+
+ /** Configuration property: suppress warnings flag. */
+ private static readonly string CfgSuppressWarn = "SuppressWarnings".ToLower();
+
+ /** Configuration property: JVM option prefix. */
+ private static readonly string CfgJvmOptPrefix = "JvmOption".ToLower();
+
+ /** Configuration property: assembly prefix. */
+ private static readonly string CfgAssemblyPrefix = "Assembly".ToLower();
+
+ /** Configuration property: JVM min memory. */
+ private static readonly string CfgJvmMinMem = "JvmInitialMemoryMB".ToLower();
+
+ /** Configuration property: JVM max memory. */
+ private static readonly string CfgJvmMaxMem = "JvmMaxMemoryMB".ToLower();
+
+ /** <inheritDoc /> */
+ public void Configure(IgniteConfiguration cfg, NameValueCollection src)
+ {
+ var jvmOpts = new List<string>();
+ var assemblies = new List<string>();
+
+ foreach (string key in src.Keys)
+ {
+ var key0 = key.ToLower();
+
+ if (key0.StartsWith(CfgPrefix))
+ {
+ key0 = key0.Substring(CfgPrefix.Length);
+
+ var val = src[key];
+
+ if (CfgHome.Equals(key0))
+ cfg.IgniteHome = val;
+ else if (CfgSpringCfgUrl.Equals(key0))
+ cfg.SpringConfigUrl = val;
+ else if (CfgJvmDll.Equals(key0))
+ cfg.JvmDllPath = val;
+ else if (CfgJvmClasspath.Equals(key0))
+ cfg.JvmClasspath = val;
+ else if (CfgSuppressWarn.Equals(key0))
+ cfg.SuppressWarnings = val != null && bool.TrueString.ToLower().Equals(val.ToLower());
+ else if (key0.StartsWith(CfgJvmOptPrefix))
+ jvmOpts.Add(val);
+ else if (key0.StartsWith(CfgAssemblyPrefix))
+ assemblies.Add(val);
+ else if (CfgJvmMinMem.Equals(key0))
+ cfg.JvmInitialMemoryMb = ConfigValueParser.ParseInt(val, key);
+ else if (CfgJvmMaxMem.Equals(key0))
+ cfg.JvmMaxMemoryMb = ConfigValueParser.ParseInt(val, key);
+ }
+ }
+
+ if (jvmOpts.Count > 0)
+ {
+ if (cfg.JvmOptions == null)
+ cfg.JvmOptions = jvmOpts;
+ else
+ jvmOpts.ForEach(val => cfg.JvmOptions.Add(val));
+ }
+
+ if (assemblies.Count > 0)
+ {
+ if (cfg.Assemblies == null)
+ cfg.Assemblies = assemblies;
+ else
+ assemblies.ForEach(val => cfg.Assemblies.Add(val));
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Config/ArgsConfigurator.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Config/ArgsConfigurator.cs b/modules/platform/dotnet/Apache.Ignite/Config/ArgsConfigurator.cs
new file mode 100644
index 0000000..b0651d7
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Config/ArgsConfigurator.cs
@@ -0,0 +1,164 @@
+/*
+ * 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.Config
+{
+ using System.Collections.Generic;
+ using Apache.Ignite.Core;
+
+ /// <summary>
+ /// Configurator which uses arguments array.
+ /// </summary>
+ internal class ArgsConfigurator : IConfigurator<string[]>
+ {
+ /** Command line argument: Ignite home. */
+ private static readonly string CmdIgniteHome = "-IgniteHome=".ToLower();
+
+ /** Command line argument: Spring config URL. */
+ private static readonly string CmdSpringCfgUrl = "-SpringConfigUrl=".ToLower();
+
+ /** Command line argument: Path to JVM dll. */
+ private static readonly string CmdJvmDll = "-JvmDll=".ToLower();
+
+ /** Command line argument: JVM classpath. */
+ private static readonly string CmdJvmClasspath = "-JvmClasspath=".ToLower();
+
+ /** Command line argument: suppress warnings flag. */
+ private static readonly string CmdSuppressWarn = "-SuppressWarnings=".ToLower();
+
+ /** Command line argument: JVM option prefix. */
+ private static readonly string CmdJvmOpt = "-J".ToLower();
+
+ /** Command line argument: assembly. */
+ private static readonly string CmdAssembly = "-Assembly=".ToLower();
+
+ /** Command line argument: JvmInitialMemoryMB. */
+ private static readonly string CmdJvmMinMem = "-JvmInitialMemoryMB=".ToLower();
+
+ /** Command line argument: JvmMaxMemoryMB. */
+ private static readonly string CmdJvmMaxMem = "-JvmMaxMemoryMB=".ToLower();
+
+ /// <summary>
+ /// Convert configuration to arguments.
+ /// </summary>
+ /// <param name="cfg"></param>
+ /// <returns></returns>
+ internal static string[] ToArgs(IgniteConfiguration cfg)
+ {
+ var args = new List<string>();
+
+ if (cfg.IgniteHome != null)
+ args.Add(CmdIgniteHome + cfg.IgniteHome);
+
+ if (cfg.SpringConfigUrl != null)
+ args.Add(CmdSpringCfgUrl + cfg.SpringConfigUrl);
+
+ if (cfg.JvmDllPath != null)
+ args.Add(CmdJvmDll + cfg.JvmDllPath);
+
+ if (cfg.JvmClasspath != null)
+ args.Add(CmdJvmClasspath + cfg.JvmClasspath);
+
+ if (cfg.SuppressWarnings)
+ args.Add(CmdSuppressWarn + bool.TrueString);
+
+ if (cfg.JvmOptions != null)
+ {
+ foreach (var jvmOpt in cfg.JvmOptions)
+ args.Add(CmdJvmOpt + jvmOpt);
+ }
+
+ if (cfg.Assemblies != null)
+ {
+ foreach (var assembly in cfg.Assemblies)
+ args.Add(CmdAssembly + assembly);
+ }
+
+ args.Add(CmdJvmMinMem + cfg.JvmInitialMemoryMb);
+ args.Add(CmdJvmMaxMem + cfg.JvmMaxMemoryMb);
+
+ return args.ToArray();
+ }
+
+ /// <summary>
+ /// Convert arguments to configuration.
+ /// </summary>
+ /// <param name="args">Arguments.</param>
+ /// <returns>Configuration.</returns>
+ internal static IgniteConfiguration FromArgs(string[] args)
+ {
+ var cfg = new IgniteConfiguration();
+
+ new ArgsConfigurator().Configure(cfg, args);
+
+ return cfg;
+ }
+
+ /** <inheritDoc /> */
+ public void Configure(IgniteConfiguration cfg, string[] src)
+ {
+ var jvmOpts = new List<string>();
+ var assemblies = new List<string>();
+
+ foreach (var arg in src)
+ {
+ var argLow = arg.ToLower();
+
+ if (argLow.StartsWith(CmdIgniteHome))
+ cfg.IgniteHome = arg.Substring(CmdIgniteHome.Length);
+ else if (argLow.StartsWith(CmdSpringCfgUrl))
+ cfg.SpringConfigUrl = arg.Substring(CmdSpringCfgUrl.Length);
+ else if (argLow.StartsWith(CmdJvmDll))
+ cfg.JvmDllPath = arg.Substring(CmdJvmDll.Length);
+ else if (argLow.StartsWith(CmdJvmClasspath))
+ cfg.JvmClasspath = arg.Substring(CmdJvmClasspath.Length);
+ else if (argLow.StartsWith(CmdSuppressWarn))
+ {
+ var val = arg.Substring(CmdSuppressWarn.Length);
+
+ cfg.SuppressWarnings = bool.TrueString.ToLower().Equals(val.ToLower());
+ }
+ else if (argLow.StartsWith(CmdJvmMinMem))
+ cfg.JvmInitialMemoryMb = ConfigValueParser.ParseInt(arg.Substring(CmdJvmMinMem.Length),
+ CmdJvmMinMem);
+ else if (argLow.StartsWith(CmdJvmMaxMem))
+ cfg.JvmMaxMemoryMb = ConfigValueParser.ParseInt(arg.Substring(CmdJvmMaxMem.Length),
+ CmdJvmMaxMem);
+ else if (argLow.StartsWith(CmdJvmOpt))
+ jvmOpts.Add(arg.Substring(CmdJvmOpt.Length));
+ else if (argLow.StartsWith(CmdAssembly))
+ assemblies.Add(arg.Substring(CmdAssembly.Length));
+ }
+
+ if (jvmOpts.Count > 0)
+ {
+ if (cfg.JvmOptions == null)
+ cfg.JvmOptions = jvmOpts;
+ else
+ jvmOpts.ForEach(val => cfg.JvmOptions.Add(val));
+ }
+
+ if (assemblies.Count > 0)
+ {
+ if (cfg.Assemblies == null)
+ cfg.Assemblies = assemblies;
+ else
+ assemblies.ForEach(val => cfg.Assemblies.Add(val));
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Config/ConfigValueParser.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Config/ConfigValueParser.cs b/modules/platform/dotnet/Apache.Ignite/Config/ConfigValueParser.cs
new file mode 100644
index 0000000..796b8e1
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Config/ConfigValueParser.cs
@@ -0,0 +1,42 @@
+/*
+ * 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.Config
+{
+ using System;
+
+ /// <summary>
+ /// Parses Ignite config values.
+ /// </summary>
+ internal class ConfigValueParser
+ {
+ /// <summary>
+ /// Parses provided string to int. Throws a custom exception if failed.
+ /// </summary>
+ public static int ParseInt(string value, string propertyName)
+ {
+ int result;
+
+ if (int.TryParse(value, out result))
+ return result;
+
+ throw new InvalidOperationException(
+ string.Format("Failed to configure Ignite: property '{0}' has value '{1}', which is not an integer.",
+ propertyName, value));
+ }
+ }
+}