Hi Juan, It was mistake in my mail. We do have TransactionScope.complete() just before end of using block. Problem is it does not reach there at all. The exception occurs before that - second session.flush().
Regards, Samir On Feb 22, 11:13 am, Juan <[email protected]> wrote: > Since you didn't call transactioscope.complete(), it is trying to > rollback the SQL insert/updates issued by session.flush(), but since > the session is gone, it can't > > On Feb 19, 7:33 am, Samir <[email protected]> wrote: > > > We are having an application which is working file in development > > environment, but in the test environment, we get an exception whenever > > we try to perform second operation within a transaction scope. > > Pseudocode that is causing the issue: > > > using (TransactionScope tScope = new TransactionScope()) > > { > > using (ISession session = sessionFactory.OpenSession()) > > { > > session.SaveOrUpdate(obj1); // some transient obj > > session.Flush(); > > } > > > using (ISession session = sessionFactory.OpenSession()) > > { > > session.SaveOrUpdate(obj2); // some another transient obj > > session.Flush(); // Exception occurs here > > } > > > } > > > The exception that occurs: > > > Message: Error has occured in service: > > System.Transactions.TransactionException: The operation is not valid > > for the state of the transaction. > > at > > System.Transactions.TransactionState.EnlistVolatile(InternalTransaction > > tx, IEnlistmentNotification enlistmentNotification, EnlistmentOptions > > enlistmentOptions, Transaction atomicTransaction) > > at > > System.Transactions.Transaction.EnlistVolatile(IEnlistmentNotification > > enlistmentNotification, EnlistmentOptions enlistmentOptions) > > at > > NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.EnlistInDist > > ributedTransactionIfNeeded(ISessionImplementor > > session) > > at > > NHibernate.Impl.AbstractSessionImpl.EnlistInAmbientTransactionIfNeeded() > > at > > NHibernate.Impl.AbstractSessionImpl.CheckAndUpdateSessionStatus() > > at NHibernate.Impl.SessionImpl.get_Batcher() > > at NHibernate.Type.DbTimestampType.UsePreparedStatement(String > > timestampSelectString, ISessionImplementor session) > > at > > NHibernate.Type.DbTimestampType.GetCurrentTimestamp(ISessionImplementor > > session) > > at NHibernate.Type.DbTimestampType.Seed(ISessionImplementor > > session) > > at NHibernate.Type.TimestampType.Next(Object current, > > ISessionImplementor session) > > at NHibernate.Engine.Versioning.Increment(Object version, > > IVersionType versionType, ISessionImplementor session) > > at > > NHibernate.Event.Default.DefaultFlushEntityEventListener.GetNextVersion(Flu > > shEntityEvent > > event) > > at > > NHibernate.Event.Default.DefaultFlushEntityEventListener.ScheduleUpdate(Flu > > shEntityEvent > > event) > > at > > NHibernate.Event.Default.DefaultFlushEntityEventListener.OnFlushEntity(Flus > > hEntityEvent > > event) > > at > > NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities(FlushE > > vent > > event) > > at > > NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExe > > cutions(FlushEvent > > event) > > at > > NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent > > event) > > at NHibernate.Impl.SessionImpl.Flush() > > > We have checked that MSDTC is running fine. On test server, if we use > > plain OracleConnection class within TransactionScope, then code is > > working fine. Issue occurs when using NHibernate session only. We are > > using: > > > NHibernate 3.0.0 > > Oracle Client 11.2.0.1 > > .NET 3.5 SP1 > > > In the nhibernate logs, following are the last few lines when > > transaction is suddenly rolled back without any error in the log: > > > 2011-02-19 19:54:38,155 [9] DEBUG NHibernate.AdoNet.AbstractBatcher - > > ExecuteNonQuery took 1 ms > > 2011-02-19 19:54:38,155 [9] DEBUG NHibernate.AdoNet.AbstractBatcher - > > Closed IDbCommand, open IDbCommands: 0 > > 2011-02-19 19:54:38,170 [9] DEBUG > > NHibernate.Persister.Collection.ICollectionPersister - done deleting > > collection > > 2011-02-19 19:54:38,170 [9] DEBUG > > NHibernate.Persister.Collection.ICollectionPersister - Inserting > > collection: [XXX.BusinessEntities.RolePlayer.PartyNameList#843] > > 2011-02-19 19:54:38,186 [9] DEBUG > > NHibernate.Persister.Collection.ICollectionPersister - collection was > > empty > > 2011-02-19 19:54:38,186 [9] DEBUG NHibernate.AdoNet.ConnectionManager > > - registering flush end > > 2011-02-19 19:54:38,201 [9] DEBUG > > NHibernate.Event.Default.AbstractFlushingEventListener - post flush > > 2011-02-19 19:54:38,201 [9] DEBUG NHibernate.Impl.SessionImpl - > > [session-id=4391a921-5624-4552-bfa4-13b87f92b6cc] running > > ISession.Dispose() > > > ------- Here the first session is complete and second start starts > > within same TransactionScope > > > 2011-02-19 19:54:38,217 [9] DEBUG NHibernate.Impl.SessionImpl - > > [session-id=5b33510a-593c-464c-98d9-f01eb52dce24] opened session at > > timestamp: 634337420782, for session factory: [/ > > b72244cfece246d985ae4d4a2bbd9bd3] > > 2011-02-19 19:54:38,217 [9] DEBUG NHibernate.Impl.AbstractSessionImpl > > - enlisted into DTC transaction: Serializable > > 2011-02-19 19:54:38,233 [9] DEBUG NHibernate.Engine.VersionValue - > > version unsaved-value strategy UNDEFINED > > 2011-02-19 19:54:38,248 [9] DEBUG NHibernate.Engine.IdentifierValue - > > unsaved-value: 0 > > 2011-02-19 19:54:38,248 [9] DEBUG > > NHibernate.Event.Default.AbstractSaveEventListener - transient > > instance of: XXX.BusinessEntities.ScreenSectionConfirmation > > 2011-02-19 19:54:38,264 [9] DEBUG > > NHibernate.Event.Default.DefaultMergeEventListener - merging transient > > instance > > 2011-02-19 19:54:38,280 [9] DEBUG NHibernate.AdoNet.AbstractBatcher - > > Opened new IDbCommand, open IDbCommands: 1 > > 2011-02-19 19:54:38,280 [9] DEBUG NHibernate.AdoNet.AbstractBatcher - > > Building an IDbCommand object for the SqlString: select > > SEQ_SCR_SECTION_CONFIRM_ID.nextval from dual > > 2011-02-19 19:54:38,295 [9] DEBUG NHibernate.SQL - select > > SEQ_SCR_SECTION_CONFIRM_ID.nextval from dual > > 2011-02-19 19:54:38,295 [9] DEBUG > > NHibernate.Connection.DriverConnectionProvider - Obtaining > > IDbConnection from Driver > > 2011-02-19 19:54:38,436 [9] DEBUG NHibernate.Impl.SessionImpl - > > transaction completion > > 2011-02-19 19:54:38,436 [9] DEBUG NHibernate.AdoNet.ConnectionManager > > - aggressively releasing database connection > > 2011-02-19 19:54:38,451 [9] DEBUG > > NHibernate.Connection.ConnectionProvider - Closing connection > > 2011-02-19 19:54:38,451 [9] DEBUG NHibernate.Impl.AbstractSessionImpl > > - rolled back DTC transaction > > 2011-02-19 19:54:38,467 [9] DEBUG NHibernate.Impl.SessionImpl - > > transaction completion > > 2011-02-19 19:54:38,467 [9] DEBUG NHibernate.AdoNet.ConnectionManager > > - aggressively releasing database connection > > 2011-02-19 19:54:38,483 [9] DEBUG NHibernate.Impl.AbstractSessionImpl > > - rolled back DTC transaction > > 2011-02-19 19:54:38,483 [9] DEBUG NHibernate.Impl.SessionImpl - > > transaction completion > > 2011-02-19 19:54:38,498 [9] DEBUG NHibernate.AdoNet.ConnectionManager > > - aggressively releasing database connection > > 2011-02-19 19:54:38,498 [9] DEBUG NHibernate.Impl.SessionImpl - > > [session-id=4391a921-5624-4552-bfa4-13b87f92b6cc] executing real > > Dispose(True) > > 2011-02-19 19:54:38,514 [9] DEBUG NHibernate.Impl.SessionImpl - > > closing session > > 2011-02-19 19:54:38,514 [9] DEBUG NHibernate.AdoNet.AbstractBatcher - > > running BatcherImpl.Dispose(true) > > 2011-02-19 19:54:38,530 [9] DEBUG NHibernate.Impl.SessionImpl - > > transaction completion > > 2011-02-19 19:54:38,545 [9] DEBUG NHibernate.AdoNet.ConnectionManager > > - aggressively releasing database connection > > 2011-02-19 19:54:38,561 [9] DEBUG NHibernate.Impl.AbstractSessionImpl > > - enlisted into DTC transaction: Serializable > > 2011-02-19 19:54:38,561 [9] DEBUG NHibernate.Impl.SessionImpl - > > transaction completion > > 2011-02-19 19:54:38,576 [9] DEBUG NHibernate.AdoNet.ConnectionManager > > - aggressively releasing database connection > > 2011-02-19 19:54:38,576 [9] DEBUG NHibernate.Impl.SessionImpl - > > [session-id=5b33510a-593c-464c-98d9-f01eb52dce24] running > > ISession.Dispose() > > 2011-02-19 19:54:38,592 [9] DEBUG NHibernate.Impl.SessionImpl - > > [session-id=5b33510a-593c-464c-98d9-f01eb52dce24] executing real > > Dispose(True) > > 2011-02-19 19:54:38,592 [9] DEBUG NHibernate.Impl.SessionImpl - > > closing session > > 2011-02-19 19:54:38,608 [9] DEBUG NHibernate.AdoNet.AbstractBatcher - > > running BatcherImpl.Dispose(true) > > 2011-02-19 19:54:38,608 [9] DEBUG NHibernate.AdoNet.AbstractBatcher - > > Closed IDbCommand, open IDbCommands: 0 -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
