ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Niels Beekman" <n.beek...@wis.nl>
Subject RE: queryForObject deadlock with high concurrent calls
Date Mon, 13 Nov 2006 22:04:05 GMT
iBATIS uses auto transaction semantics if you do not explicitly specify
them, so maxTransactions="5" limits the amount of concurrent
transactions to 5, maxSessions="10" also does not seem to be enough. Try
increasing the values, this is most definitely not a deadlock.


-----Original Message-----
From: class acts [mailto:classacts@gmail.com] 
Sent: maandag 13 november 2006 20:45
To: user-java@ibatis.apache.org
Subject: Re: queryForObject deadlock with high concurrent calls

Hi, thanks for the prompt replies.  I attached a stack-dump, hopefully
it helps.  Not quite sure what is going on.  I'm not used to iBATIS'
patterns so perhaps I may be using it incorrectly.  The app is a TCP
server app, that in this case executes a queryForObject() then a
.update() for each connection to the server.  I can connect about 35
connections a second, its taking between 50ms and 150ms for each
connections-life (ie, to exec the 2 statements) but it seems that if i
do a lot at once, all the threads handling the connections and trying
to execute the sql queries just hang..  usually at the driver level, I
would have a timeout and keep trying to obtain a connection, or
explicitly fail.  here is a sample of how im using the ibatis, I know
it probably should be done as a transaction, but it's not important at
this point, and it also seems to slow it down.

try {
User user = (User)sqlMap.queryForObject("getUserByUsername", username);
// update user object...

sqlMap.update("updateLoginStats", user);
// more stuff
} catch (SQLException e1) {
log.fatal(client+" Error handling query", e1);

Here is a snippet of my config:

<settings cacheModelsEnabled="true" enhancementEnabled="true"
		lazyLoadingEnabled="true" maxRequests="32"
		maxTransactions="5" useStatementNamespaces="false"/>

<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			<property name="JDBC.Driver"
			<property name="JDBC.ConnectionURL"
			<property name="JDBC.Username" value="xxx"/>
			<property name="JDBC.Password" value="xxx"/>
			<property name="Pool.TimeToWait" value="5000"/>


View raw message