/// <summary>
 /// Perform a rollback, if appropriate.
 /// </summary>
 /// <param name="session">The session to rollback.</param>
 /// <exception cref="NMSException">In case of a rollback error</exception>
 protected virtual void RollbackIfNecessary(ISession session)
 {
     if (session.Transacted && IsSessionLocallyTransacted(session))
     {
         // Transacted session created by this container -> rollback
         NmsUtils.RollbackIfNecessary(session);
     }
 }
 /// <summary>
 /// Perform a rollback, if appropriate.
 /// </summary>
 /// <param name="session">The session to rollback.</param>
 /// <exception cref="NMSException">In case of a rollback error</exception>
 protected virtual void RollbackIfNecessary(ISession session)
 {
     if (session.Transacted && IsSessionLocallyTransacted(session))
     {
         // Transacted session created by this container -> rollback
         NmsUtils.RollbackIfNecessary(session);
     }
     else if (IsClientAcknowledge(session))
     {
         session.Recover();
     }
 }
 /// <summary>
 /// Perform a rollback, handling rollback excepitons properly.
 /// </summary>
 /// <param name="session">The session to rollback.</param>
 /// <param name="ex">The thrown application exception.</param>
 /// <exception cref="NMSException">in case of a rollback error.</exception>
 protected virtual void RollbackOnExceptionIfNecessary(ISession session, Exception ex)
 {
     try
     {
         if (session.Transacted && IsSessionLocallyTransacted(session))
         {
             // Transacted session created by this container -> rollback
             if (logger.IsDebugEnabled)
             {
                 logger.Debug("Initiating transaction rollback on application exception");
             }
             NmsUtils.RollbackIfNecessary(session);
         }
     } catch (NMSException)
     {
         logger.Error("Application exception overriden by rollback exception", ex);
         throw;
     }
 }