-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Strange concurrency problem.
PostPosted: Fri Mar 20, 2009 1:40 pm 
Newbie

Joined: Mon Mar 03, 2008 3:02 pm
Posts: 3
Hello All,

Help me please with the following topic. I spent much time struggling with it without any luck. I have problems executing my web app in multiple threads. Details:

DBMS: PervasiveSQL 9.5
NHibernate Driver: Custom (based on ReflectionBasedDriver), where SupportsMultipleOpenReaders=false
Web server: ASP.NET Development Server

I use standard NHibernateHelper that creates separate Session object for each thread (by the use of HttpContext.Current).

Problematic code:
Code:
ISession session = NHibernateHelper.Instance.GetSession();
IQuery query = session.CreateQuery("from SomeEntity");

query.List(entityRecords); // This is where exceptions occur


When this code executes in a single thread - everything is fine. When i try 2 threads i could get 3 different types of exception every time.

All 3 possible exceptions are listed below:

1)
Code:
NHibernate.ADOException: could not execute query
[SQL: SELECT this_.CUSIP as CUSIP13_0_, this_.ControlCode as ControlC2_13_0_, this_.RecordType as RecordType13_0_, this_.IssueFormat as IssueFor4_13_0_, this_.InterestType as Interest5_13_0_, this_.PrinPayFrequency as PrinPayF6_13_0_, this_.PrinPaymentDay as PrinPaym7_13_0_, this_.SType as SType13_0_, this_.CurMktAskPrice as CurMktAs9_13_0_ FROM SecMst this_ WHERE this_.ControlCode='A' AND this_.CUSIP = ?] ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
   at Pervasive.Data.SqlClient.Lna.LnaResponse.ReadBytes(Int32 n)
   at Pervasive.Data.SqlClient.Lna.ColumnInfo.ReadValueFrom(LnaResponse res)
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.ReadFrom(LnaResponse res)
   at Pervasive.Data.SqlClient.Lna.LnaStatement.ExtendedFetch(Int16 fetchType, Int32 rowNumber, ColumnInfoSet cis, FetchReader fr)
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.DoFetch()
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.Open()
   at Pervasive.Data.SqlClient.PsqlCommand.Execute(Boolean parseOnly, CommandBehavior behavior, Boolean needReader)
   at Pervasive.Data.SqlClient.PsqlCommand.ExecuteReader(CommandBehavior behavior)
   at Pervasive.Data.SqlClient.PsqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
   at NHibernate.Impl.BatcherImpl.ExecuteReader(IDbCommand cmd)
   at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, 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)
   --- End of inner exception stack trace ---
   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 querySpaces, IType[] resultTypes)
   at NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor session)
   at NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria, IList results)
   at NHibernate.Impl.CriteriaImpl.List(IList results)
...


2)
Code:
NHibernate.ADOException: could not execute query
SQL: select mledger0_.Institution as Institut1_7_, mledger0_.TransactionNumber as Transact2_7_, mledger0_.LastSuffix as LastSuffix7_, mledger0_.BalChgPosted as BalChgPo4_7_, mledger0_.IOFlag as IOFlag7_, mledger0_.MBSPrinPayUpFlag as MBSPrinP6_7_, mledger0_.DispositionType as Disposit7_7_, mledger0_.CurCost as CurCost7_, mledger0_.CurParValue as CurParVa9_7_ from MLedger mledger0_ where mledger0_.Institution = :InstitutionPortfolioSType.InstitutionCode AND mledger0_.Portfolio = :InstitutionPortfolioSType.PortfolioCode AND mledger0_.SType = :InstitutionPortfolioSType.STypeCode and mledger0_.PortCategory IN (:portfolioCategory.portfolioCategories) and mledger0_.StatusCode IN (:StatusCodesInclude.statusCodes) and mledger0_.ControlCode='A'] ---> System.ArgumentOutOfRangeException: Year, Month, and Day parameters describe an un-representable DateTime.
   at System.DateTime.DateToTicks(Int32 year, Int32 month, Int32 day)
   at System.DateTime..ctor(Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, Int32 millisecond)
   at Pervasive.Data.SqlClient.Lna.LnaResponse.ReadDate()
   at Pervasive.Data.SqlClient.Lna.ColumnInfo.ReadValueFrom(LnaResponse res)
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.ReadFrom(LnaResponse res)
   at Pervasive.Data.SqlClient.Lna.LnaStatement.ExtendedFetch(Int16 fetchType, Int32 rowNumber, ColumnInfoSet cis, FetchReader fr)
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.DoFetch()
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.Open()
   at Pervasive.Data.SqlClient.PsqlCommand.Execute(Boolean parseOnly, CommandBehavior behavior, Boolean needReader)
   at Pervasive.Data.SqlClient.PsqlCommand.ExecuteReader(CommandBehavior behavior)
   at Pervasive.Data.SqlClient.PsqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
   at NHibernate.Impl.BatcherImpl.ExecuteReader(IDbCommand cmd)
   at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, 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)
   --- End of inner exception stack trace ---
   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 querySpaces, IType[] resultTypes)
   at NHibernate.Hql.Classic.QueryTranslator.List(ISessionImplementor session, QueryParameters queryParameters)
   at NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters, IList results)
   at NHibernate.Impl.QueryImpl.List(IList results)
...


3)
Code:
NHibernate.ADOException: could not execute query
select mledger0_.Institution as Institut1_7_, mledger0_.TransactionNumber as Transact2_7_, mledger0_.LastSuffix as LastSuffix7_, mledger0_.BalChgPosted as BalChgPo4_7_, mledger0_.IOFlag as IOFlag7_, mledger0_.MBSPrinPayUpFlag as MBSPrinP6_7_, mledger0_.DispositionType as Disposit7_7_, mledger0_.CurCost as CurCost7_, mledger0_.CurParValue as CurParVa9_7_, mledger0_.CurBookValue as CurBook10_7_, mledger0_.OrigParValue as OrigPar11_7_, from MLedger mledger0_ where mledger0_.ControlCode='A'] ---> Pervasive.Data.SqlClient.PsqlException: System.IO.EndOfStreamException: Unable to read beyond the end of the stream.
   at System.IO.__Error.EndOfFile()
   at System.IO.MemoryStream.InternalReadInt32()
   at System.IO.BinaryReader.ReadInt32()
   at Pervasive.Data.SqlClient.Lna.NetworkBinaryReader.ReadInt32()
   at Pervasive.Data.SqlClient.Lna.ColumnInfo.ReadValueFrom(LnaResponse res)
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.ReadFrom(LnaResponse res)
   at Pervasive.Data.SqlClient.Lna.LnaStatement.ExtendedFetch(Int16 fetchType, Int32 rowNumber, ColumnInfoSet cis, FetchReader fr)
   at Pervasive.Data.SqlClient.Lna.LnaStatement.ExtendedFetch(Int16 fetchType, Int32 rowNumber, ColumnInfoSet cis, FetchReader fr)
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.DoFetch()
   at Pervasive.Data.SqlClient.Lna.ForwardReadResultCache.Open()
   at Pervasive.Data.SqlClient.PsqlCommand.Execute(Boolean parseOnly, CommandBehavior behavior, Boolean needReader)
   at Pervasive.Data.SqlClient.PsqlCommand.ExecuteReader(CommandBehavior behavior)
   at Pervasive.Data.SqlClient.PsqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
   at NHibernate.Impl.BatcherImpl.ExecuteReader(IDbCommand cmd)
   at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, 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)
   --- End of inner exception stack trace ---
   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 querySpaces, IType[] resultTypes)
   at NHibernate.Hql.Classic.QueryTranslator.List(ISessionImplementor session, QueryParameters queryParameters)
   at NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters, IList results)
   at NHibernate.Impl.QueryImpl.List(IList results)
...


I checked that Session objects are unique for each thread by its hash codes. When 2 threads are executed, 2 connections to my DB are opened. For each connection separate Reader object is created. Everything seems ok.

I wrote small console application where i created 2 threads which both createed Connection object (ADO.NET), executed reader and shown results for each thread. Everything worked fine. No collisions were detected.

Anyone has ideas why this could happen? Any ideas are very appreciated.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.