Using the following

NHibernate 2.1.0.4000

Oracle 11g

We very randomly have an issue where the connection is not open when
we try to execute a query to return a sequence from the database.
This doesn't seem to be consistently reproducible.  We are using
NHibernate transactions and not .NET transactions.  The system has
multiple threads running in the same process. At times it will process
25000 units of work without an issue and then other times it ends up
spitting out the error, but usually for only one or two units out of
thousands.

We are using the default connection release settings.

We're using a model the same as that detailed here.

http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx

Hibernate Mapping File is below:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">

  <session-factory>
    <property name="connection.provider">
      MyCustomConnectionProvider, DataAccess.Base
    </property>
    <property name="dialect">
      NHibernate.Dialect.Oracle10gDialect
    </property>
    <property name="connection.driver_class">
      NHibernate.Driver.OracleDataClientDriver
    </property>
    <property name="connection.isolation">ReadCommitted</property>
    <property
name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle</property>
    <property name="hbm2ddl.keywords">none</property>
    <!-- Log sql query -->
    <property name="show_sql">false</property>
        <!-- HBM Mapping Files -->
    <mapping assembly="MyAssembly"/>
  </session-factory>
</hibernate-configuration>

Code is below:

public long GetNextSequence(string seqName)
                {
                        var query = "select " + seqName + ".nextval from dual ";



            var sqlQuery = NHibernateSession.CreateSQLQuery(query);

                    BeginTransaction();

            var results = TryCatch(
                (() => sqlQuery.UniqueResult<Decimal>())
                , ErrorCodes.GetNextSequence
                , "NHibernateDataProvider.GetNextSequence");

                    CommitTransaction();

            return Convert.ToInt64(results);
        }

/// <summary>
                /// Begins Transaction on current session
                /// </summary>
                public void BeginTransaction()
                {
                        //return (ITransaction)
                        TryCatch<ITransaction>(
                                
NHibernateSessionManager.Instance.BeginTransaction
                                , ErrorCodes.BeginTransaction
                                , "NHibernateSessionManager.BeginTransaction");
                }

                /// <summary>
                /// Commits transaction on current session
                /// </summary>
                public void CommitTransaction()
                {
                        TryCatch(
                                
NHibernateSessionManager.Instance.CommitTransaction
                                , ErrorCodes.CommitTransaction
                                , "NHibernateSessionManager.CommitTransaction");
                }

protected static TResult TryCatch<TResult>(Func<TResult> func, string
errorCode, string location)
                {
                        try
                        {
                                return func();
                        }
                        catch (Exception ex)
                        {
                                HandleException(ex, errorCode, location);
                        }

                        return default(TResult);
                }

Error is below:

6/9/2011 11:15:12 AM : 0 : Database:11 : 2 : Generic TPS Error. Check
system application log for additional details. could not execute query
[ select SEQ_NAME.nextval from dual ]
SQL: select SEQ_NAME.nextval from dual (Connection must be open for
this operation) at NHibernate.Loader.Loader.DoList(ISessionImplementor
session, QueryParameters queryParameters)
at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor
session, QueryParameters queryParameters)
at NHibernate.Loader.Loader.List(ISessionImplementor session,
QueryParameters queryParameters, ISet`1 querySpaces, IType[]
resultTypes)
at NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery
customQuery, QueryParameters queryParameters, IList results)
at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec,
QueryParameters queryParameters, IList results)
at NHibernate.Impl.SessionImpl.ListT(NativeSQLQuerySpecification spec,
QueryParameters queryParameters)
at NHibernate.Impl.SqlQueryImpl.ListT()
at DataAccess.Base.NHibernateDataProvider`2.TryCatchTResult(Func`1
func, String errorCode, String location)

at Oracle.DataAccess.Client.OracleDataReader..ctor(OracleConnection
connection, IntPtr[] opsSqlCtx, IntPtr opsDacCtx, IntPtr opsErrCtx,
OpoSqlValCtx* pOpoSqlValCtx, OpoDacValCtx* pOpoDacValCtx, MetaData
metaData, Int32 resultCount, CommandBehavior commandBehavior,
Hashtable safeMapping, String commandText, Int32 freeOpsSqlCtx,
Boolean bFetchSizePropertySet)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean
requery, Boolean fillRequest, CommandBehavior behavior)
at
Oracle.DataAccess.Client.OracleCommand.ExecuteDbDataReader(CommandBehavior
behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean
autoDiscoverTypes, Boolean callable, RowSelection selection,
ISessionImplementor session)
at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session,
QueryParameters queryParameters, Boolean returnProxies)
at
NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor
session, QueryParameters queryParameters, Boolean returnProxies)
at NHibernate.Loader.Loader.DoList(ISessionImplementor session,
QueryParameters queryParameters)

-- 
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