ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Clinton Begin" <clinton.be...@gmail.com>
Subject Re: What is RequestScope used for?
Date Tue, 06 Mar 2007 17:59:19 GMT
You might want to write a minimal test that demonstrates the behavior.  If
you can't recreate it, it might be something else entirely.

Clinton

On 3/6/07, Clinton Begin <clinton.begin@gmail.com> wrote:
>
> >> With regards to the DAO framework side of it, could I just wrap any
> calls to the SQL maps
> >> with a try/finally that always calls the endTransaction() method on the
> SqlMapClient?
>
> No, don't do that.  The iBATIS DAO framework is very similar to Spring.
> It handles the transactions inside the DAOs for you.  But the consumer of
> the DAOs shoudl be starting and ending transactions on the DaoManager within
> a try/finally block.
>
> >> Because all of them are only SELECT statements, I don't really need
> transactions inside the library itself.
> >> Or do I actually need to insert the startTransaction() and
> commitTransaction() methods regardless?
>
> No, you don't need start/commit/end if you're just doing selects.  You can
> just call the DAO methods.  Just make sure you're not calling start without
> a corresponding end....
>
> Clinton
>
>
> On 3/6/07, Kalcevich, Daniel <dkalcevich@firstam.com> wrote:
> >
> >  Clinton ,
> >
> >
> >
> > Yes, the applications run inside the same JVM.
> >
> >
> >
> > As for the Spring, I have already posted something to the Spring forum
> > verifying that the way in which we use them are correct, and they appear to
> > be.
> >
> >
> >
> > With regards to the DAO framework side of it, could I just wrap any
> > calls to the SQL maps with a try/finally that always calls the
> > endTransaction() method on the SqlMapClient?  Because all of them are only
> > SELECT statements, I don't really need transactions inside the library
> > itself.  Or do I actually need to insert the startTransaction() and
> > commitTransaction() methods regardless?
> >
> >
> >
> > Daniel
> >
> >
> >  ------------------------------
> >
> > Is this all in the same VM?
> >
> > Spring is the recommended DAO solution and is probably the way that at
> > least 50% of iBATIS users use it.  You don't need to worry about
> > transactions at all with Spring, it will take care of it (as far as iBATIS
> > is concerned at least).  Have a look at the spring docs to ensure that
> > you're using it the right way.
> >
> > I agree that you should start by looking at the other part that uses
> > your own lib with iBATIS DAO.  With iBATIS DAO you need to ensure you're
> > starting and ending transactions in a try/finally block just like with
> > SqlMapClient.
> >
> > Cheers,
> > Clinton
> >
> >
> >  ------------------------------
> >
> > *From:* Kalcevich, Daniel
> > *Sent:* Tuesday, March 06, 2007 9:29 AM
> > *To:* 'user-java@ibatis.apache.org'
> > *Subject:* RE: What is RequestScope used for?
> >
> >
> >
> > Clinton,
> >
> >
> >
> > Thanks for the response.  Now with regards to the Transactions… our
> > application uses SQL Maps in two different ways.
> >
> >
> >
> >    1. Within Spring inside the Web App – We use transactions within
> >    Spring, thus SQL maps should not be using the transactions.
> >    2. A library we developed that the Web App uses – This uses the
> >    DAO framework and SQL Maps internally, but only retrieves information from
> >    the DB, not inserts.
> >
> >
> >
> > For the Transactions, do I have to declare them explicitly in both
> > places, or do you think it would be better to address the standalone library
> > first?
> >
> >
> >
> > Daniel
> >
> >
> >  ------------------------------
> >
> > 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
> >
> >
> >  ------------------------------
> >
> > *From:* Kalcevich, Daniel
> > *Sent:* Tuesday, March 06, 2007 8:18 AM
> > *To:* 'user-java@ibatis.apache.org'
> > *Subject:* RE: What is RequestScope used for?
> >
> >
> >
> > 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:* 'user-java@ibatis.apache.org'
> > *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.SqlMapExecutorDelegate
> >
> > ------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:* 'user-java@ibatis.apache.org'
> > *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
> >
>
>

Mime
View raw message