As I said, it's fine to share sqlmapclient... But not sessions. And you wouldn't have to modify iB3 to implement a a multi-thread capable sqlmapclient-like class.
Clinton On 2010-03-04, François Schiettecatte <fschietteca...@gmail.com> wrote: > Clinton > > Thanks for explaining that, much clearer now and it makes my code simpler. I > know I *could* modify the iBATIS 3 code but I am loath to do that because it > would introduce variability. > > FWIW iBATIS 2 was completely stable sharing SqlMapClient, I had no issues > for 18 months. > > Cheers > > François > > > On Mar 4, 2010, at 9:22 AM, Clinton Begin wrote: > >>>> Session Level Cache ... does not work if the data has been changed by >>>> another process >> >> The session level cache is exactly that... session level. It only >> clears things local to your session. If another process changes data, >> you should have cache flushing rules in place to cause the cache to >> flush upon writing. This is no different than iBATIS 2.0. >> >>>> sharing sql sessions across threads >> >> Neither iBATIS 2 or 3 are safe to share sessions between threads. If >> it's working for you in iBATIS 2, you're getting lucky, and it will >> fail some day. >> >> iBATIS 2 had the SqlMapClient, which was "thread safe" because it used >> a ThreadLocal variable to manage the sessions for you. But the >> sessions themselves are not thread safe. >> >> iBATIS 3 has done away with the ThreadLocal API, in favor of better >> practices like Dependency Injection. But it would take all of 30 >> seconds for you to create your own ThreadLocal manager (you could >> practically copy the iBATIS 2.0 SqlMapClient). >> >> But definitely review your code to ensure you're not sharing sessions >> across threads... Session == Connection... so that's that's very bad. >> >> >> Cheers, >> Clinton >> >> 2010/3/4 François Schiettecatte <fschietteca...@gmail.com>: >>> Hi >>> >>> I have been migrating a project from ibatis 2 to 3 and have run into some >>> issues, mostly to do with connection pool management (C3P0), and I will >>> write up my notes on my blog once I am done. >>> >>> Two issues specifically with the Session Level Cache: >>> >>> --------- >>> Clearing the Session Level Cache >>> >>> void clearCache() >>> >>> The SqlSession instance has a local cache that is cleared upon update, >>> commit, rollback and close. To close it explicitly (perhaps with the >>> intention to do more work), you can call clearCache(). >>> --------- >>> >>> One issue is that it seems to cache selects which does not work if the >>> data has been changed by another process, running the select again in the >>> same session returns stale data. >>> >>> The other problem has to do with sharing sql sessions across threads >>> (which worked fine in 2). Running multiple selects through the same >>> session gives me casting errors generated by line 88 in BaseExecutor: >>> >>> localCache.putObject(key, EXECUTION_PLACEHOLDER); >>> >>> What seems to be happening is that the same query is coming in on one >>> thread and generates a hit on the localCache before the search is done on >>> another thread. >>> >>> Note that I am using C3P0 here which recommends caching sessions as much >>> as possible and it could be that I am not using the stack correctly, but >>> what I was doing worked fine in 2.x under heavy load. >>> >>> Cheers >>> >>> François >>> >>> >>> -- >>> François Schiettecatte >>> 35 Washington Square North, #2 >>> Salem, MA, 01970 >>> 617-909-2504 >>> http://fschiettecatte.wordpress.com/ >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org >>> For additional commands, e-mail: user-java-h...@ibatis.apache.org >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org >> For additional commands, e-mail: user-java-h...@ibatis.apache.org >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org > For additional commands, e-mail: user-java-h...@ibatis.apache.org > > -- Sent from my mobile device --------------------------------------------------------------------- To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org For additional commands, e-mail: user-java-h...@ibatis.apache.org