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.
