<cacheModel id ="user-cache" type= "LRU" readOnly="false" serialize="true" >
<flushInterval hours ="24"/>
<flushOnExecute statement ="addEmail"/>
<property name ="cache-size" value= "1000"/>
</cacheModel>
<resultMap id ="list-users-result" class= "com.fmr.gift.strutsplus.domain.User">
<result property ="id" column= "UID"/>
<result property ="age" column= "AGE"/>
<result property ="firstname" column= "FIRSTNAME"/>
<result property ="lastname" column= "LASTNAME"/>
<result property ="eventsJoined" column= "UID" select="getEventsJoinedByUserId" />
<result property ="emails" column= "UID" select="getEmailsbyUserId" />
</resultMap>
<select id ="listUsers" resultMap= "list-users-result" cacheModel="user-cache" >
SELECT
UID,
AGE,
FIRSTNAME,
LASTNAME
FROM
USERS
</select>
<statement id="addEmail" parameterClass="java.util.HashMap">
From: Clinton Begin [mailto:[EMAIL PROTECTED]
Sent: Thursday, June 30, 2005 12:01 AM
To: [email protected]
Subject: Re: Cache not being flushed
It looks right....but this is the second time this has been reported in recent months. We have about 6 unit tests just to verify cache flushing on execution, so I'm not sure what it could be. Any chance you could debug using the ibatis source code, so you could step through the cache model? (put a breakpoint in CacheModel or in LRUCacheController...probably the flush method of either...)
Cheers,
Clinton
On 6/28/05, Rao, Satish <[EMAIL PROTECTED]> wrote:I have the following xml
<sqlMap namespace ="User">
<cacheModel id ="user-cache" type= "LRU" readOnly="false" serialize="true" >
<flushInterval hours ="24"/>
<flushOnExecute statement ="addUser"/>
<flushOnExecute statement ="removeUser"/>
<flushOnExecute statement ="addEmail"/>
<flushOnExecute statement ="removeUserEmails"/>
<property name ="cache-size" value= "1000"/>
</cacheModel>
<resultMap id ="list-users-result" class= "com.fmr.gift.strutsplus.domain.User">
<result property ="id" column= "UID"/>
<result property ="age" column= "AGE"/>
<result property ="firstname" column= "FIRSTNAME"/>
<result property ="lastname" column= "LASTNAME"/>
<result property ="eventsJoined" column= "UID" select="getEventsJoinedByUserId" />
<result property ="emails" column= "UID" select="getEmailsbyUserId" />
</resultMap>
<select id ="listUsers" resultMap= "list-users-result" cacheModel="user-cache" >
SELECT
UID,
AGE,
FIRSTNAME,
LASTNAME
FROM
USERS
</select>
<delete id ="removeUser" parameterClass= "java.lang.Long">
DELETE FROM
USERS
WHERE
UID = #value#
</delete>
</sqlMap>The caching works fine for select. But when I delete a user, I expected the cache to be be flushed because of the following entry in cache model - <flushOnExecute statement="removeUser"/> . This does not happen. When I perform removeUser operation, the user list is displayed again and shows the user id that was deleted.
Am I doing anything wrong here?
