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.
