Yep, you have a leak and it is RequestScope related...but it's likely not an
ibatis bug...

It's more likely that you're not ending transactions properly.

try {
 sqlMapClient.startTransaction();
 ///... do work
} finally {
 sqlMapClient.endTransaction();
}

Clinton


On 3/6/07, Kalcevich, Daniel <[EMAIL PROTECTED]> wrote:

 OK, upon looking at the Yourkit, I am showing the number of objects in
memory as the following:



-          com.ibatis.sqlmap.engine.impl.SqlMapClientImpl – 212 objects
with a total retained size in memory of 31.38MB

-          com.ibatis.sqlmap.engine.scope.RequestScope – 108, 544 objects
with a total retained size in memory of 16.49MB.

-          com.ibatis.sqlmap.engine.scope.SessionScope – 27,136 objects
with a total retained size in memory of 3.03 MB.



Do those numbers make sense?  I only question it because with every
snapshot of the memory I have taken along the way, the
RequestScope/SessionScope objects keep increasing.



Daniel


 ------------------------------

*From:* Kalcevich, Daniel
*Sent:* Tuesday, March 06, 2007 7:04 AM
*To:* '[email protected]'
*Subject:* RE: What is RequestScope used for?



I found about this RequestScope through the profiler YourKit.  Here is the
trail that references the IBatis objects.



map of com.ibatis.sqlmap.engine.scope.RequestScope

--[121] of java.lang.Object[513]

---elementData of java.util.ArrayList

----list of java.util.Collections$SynchronizedRandomAccessList

-----pool of com.ibatis.common.util.ThrottledPool

------requestPool of com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelega te


------delegate of com.ibatis.sqlmap.engine.impl.SqlMapClientImpl

-------client of 
com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransactionManager

--------transactionManager of com.ibatis.dao.engine.impl.DaoContext

---------[0] of java.lang.Object[11]

----------elementData of java.util.ArrayList

-----------value of java.lang.ThreadLocal$ThreadLocalMap$Entry

------------[1442] of java.lang.ThreadLocal$ThreadLocalMap$Entry[2049]

-------------table of java.lang.ThreadLocal$ThreadLocalMap

--------------threadLocals of java.lang.Thread [Stack Local, Thread]





The reason I thought it might be contributing to a memory leak was the
fact that at every snapshot I take, the number of HashMaps continues to
increase without going down.  Then when I look at what it is referring to,
it points to the RequestScope.



While looking in the trace, I saw that it was referencing the DaoContext's
transaction Manager.  Could the Transaction Manager be playing a part in
this?  My application uses Spring with SQL Maps, but a library we wrote uses
the DAO Framework specifically.  The Spring application does not use it.  I
think that is worth looking into, given what I see in the profiler.



Daniel




 ------------------------------

*From:* Kalcevich, Daniel
*Sent:* Monday, March 05, 2007 11:37 AM
*To:* '[email protected]'
*Subject:* What is RequestScope used for?



Hello,



I have a Spring, Struts, SQL Map application that runs on JBoss/Tomcat.
And while going through a profiler, I am seeing that there are several
instances of "com.ibatis.sqlmap.engine.scope.RequestScope".  What is that
object used for?  The reason I ask is that I am trying to track down a
memory leak and am wondering if this class is possibly part of the cause?
Any help is greatly appreciated.  Thank you.



Daniel

Reply via email to