A couple days ago I posted an exception I was receiving seemingly
randomly when using IBatis:

http://www.mail-archive.com/[email protected]/msg01152.html

I did some more research and got it to reproduce.  Here it is.


THE SETUP

In my Global.asax, I kick-start a background process using the Timer
class.  This Timer class uses a delgate DoTimerBasedStuff() which is
called periodically. The DoTimerBasedStuff() method accesses two
different databases, MySQL and SQL Server.  Both are setup properly
using their MySQLMapper and SQLServerMapper classes.

Aside from a couple of these background threads, the application also
has a web front which accesses both databases using typical .aspx
pages and classes inherited from Page.  Nothing fancy.

THE PROBLEM

If the application is started by going to index.aspx using a browser
(this page doesn't do any db stuff but triggers Global.asax) and no
other actions are taken until the first call of DoTimerBasedStuff()
all is well and both the background process and the web users are
fine.  IBatis does everything right.

BUT if I start the application by going to index.aspx and then
immediately do some work via the web which accesses a database (before
DoTimerBasedStuff() is executed), the DoTimerBasedStuff() method has
trouble accessing the HttpContext and gives the following error:


Exception: WebSessionStore: Could not obtain reference to HttpContext
 at IBatisNet.DataMapper.SessionStore.WebSessionStore.ObtainSessionContext()
 at IBatisNet.DataMapper.SessionStore.WebSessionStore.get_LocalSession()
 at IBatisNet.DataMapper.SqlMapper.QueryForObject(String
 ...

I guess the question that I should be asking is what is the best way
to run a background process/thread in a web application which uses
IBatis functionality.

Thanks in advance.

Reply via email to