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.

Reply via email to