Hmm... connection pooling and oraclemts winservice enabled? Also, have you seen this? It might be related http://davybrion.com/blog/2010/05/avoiding-leaking-connections-with-nhibernate-and-transactionscope/
On Feb 22, 1:41 am, Samir <[email protected]> wrote: > 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.
