danyolgiax
danyolgiax

Reputation: 13106

TimeOut Exception in multicriteria/future using NHibernate

I use NHibernate 3.3.3 in my ASP.NET C# application with SqlServer 2008.

DetachedCriteria _pageCriteria = CriteriaTransformer.Clone(criteria)
            .SetMaxResults(maxResult)
            .SetFirstResult(firstResult);

_recordCount= _countCriteria.GetExecutableCriteria(session).FutureValue<int>();

var _pageCriteriaFuture = _pageCriteria.GetExecutableCriteria(session).Future<T>();

_pageCriteriaFuture.ToList();

If I try to execute the previous code I get a TimeOut error:

Failed to execute multi criteria[SQL: 

SELECT count(*) as y0_ FROM Articoli this_ WHERE ((contains(this_.Oggetto, ?) or contains(this_.CorpoPlaintext, ?) or contains(this_.ParoleChiavi, ?) or contains(this_.SottoTitoloPlainText, ?)));

SELECT TOP (?)  this_.Id as Id13_0_, this_.Corpo as Corpo13_0_, this_.CorpoPlaintext as CorpoPla3_13_0_, this_.Data as Data13_0_, this_.DataInserimento as DataInse5_13_0_, this_.LinkPagina as LinkPagina13_0_, this_.Numero as Numero13_0_, this_.Oggetto as Oggetto13_0_, this_.Tag as Tag13_0_, this_.NumeroVisualizzazioni as NumeroV10_13_0_, this_.IsConsigliatoRedazione as IsConsi11_13_0_, this_.ParoleChiavi as ParoleC12_13_0_, this_.SottoTitolo as SottoTi13_13_0_, this_.SottoTitoloPlainText as SottoTi14_13_0_, this_.idArticoloOld as idArtic15_13_0_, this_.IdUser as IdUser13_0_ 
FROM Articoli this_ WHERE ((contains(this_.Oggetto, ?) or contains(this_.CorpoPlaintext, ?) or contains(this_.ParoleChiavi, ?) or contains(this_.SottoTitoloPlainText, ?))) ORDER BY this_.DataInserimento desc;

]

Inner exception:
{"Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding."}

The point is that if I try to execute these steps separately:

_recordCount= _countCriteria.GetExecutableCriteria(session).FutureValue<int>().Value;

It work like a sharm!!

Why, if I try to execute them in the same statemant, I get this error?

It's a lock problem? I try also to execute the same two-query command in MSS management studio and I get no errors!

Upvotes: 0

Views: 1414

Answers (1)

Radim K&#246;hler
Radim K&#246;hler

Reputation: 123901

The principle, the Future queries you've used are working for me. Not only when I tried to reproduce the question, but even on daily bases.

I did experienced the same exception. It was caused by the fact, that there were two sesions opened. The first, running in transaction, was locking the table with update/insert - not commited. The second was asking for result (Future) and time-out stopped it. All that in the same request (horrible)

NOTES: From the snippet (I know it could be just a quick draft, but just in case, that it is copy paste), I am not sure about the naming conventions (is criteria from outer scope, is the _recordCount member of a DAO class, because the 'var _pageCriteriaFuture' is definetly local variable while prefixed with _. The _countCriteria appears in the snippet without initialization...

That all could mean, that each parts are separated and some of them could already trigger openning/closing of the other Session. So I would suggest, turn on log4net and the full logging for NHIberante, and check, when the transaction was opened. There could be the answer.

Upvotes: 1

Related Questions