/// <summary> /// If ambient transaction is present, starts an Ignite transaction and enlists it. /// </summary> public void StartTx() { if (_transactions.Tx != null) { // Ignite transaction is already present. // We have either enlisted it already, or it has been started manually and should not be enlisted. // Java enlists existing Ignite tx in this case (see CacheJtaManager.java), but we do not. return; } if (Enlistment.Value != null) { // We are already enlisted. // .NET transaction mechanism allows nested transactions, // and they can be processed differently depending on TransactionScopeOption. // Ignite, however, allows only one active transaction per thread. // Therefore we enlist only once on the first transaction that we encounter. return; } var ambientTx = System.Transactions.Transaction.Current; if (ambientTx != null && ambientTx.TransactionInformation.Status == TransactionStatus.Active) { _transactions.TxStart(_transactions.DefaultTransactionConcurrency, ConvertTransactionIsolation(ambientTx.IsolationLevel)); Enlistment.Value = ambientTx.EnlistVolatile(this, EnlistmentOptions.None); } }
/// <summary> /// If ambient transaction is present, starts an Ignite transaction and enlists it. /// </summary> public void StartTx() { if (_transactions.Tx != null) { // Ignite transaction is already present. // We have either enlisted it already, or it has been started manually and should not be enlisted. // Java enlists existing Ignite tx in this case (see CacheJtaManager.java), but we do not. return; } var ambientTx = System.Transactions.Transaction.Current; if (ambientTx != null && ambientTx.TransactionInformation.Status == TransactionStatus.Active) { _transactions.TxStart(_transactions.DefaultTransactionConcurrency, ConvertTransactionIsolation(ambientTx.IsolationLevel)); Enlistment.Value = ambientTx.EnlistVolatile(this, EnlistmentOptions.None); } }