For future reference, we should probably just have these three options
as configuration for the cache....

LOCAL_READ_WRITE (serializable=false, readOnly=false)
SHARED_READ_ONLY (serializable=false, readOnly=true)
SHARED_READ_WRITE (serializable=true, readOnly=false)

For the record, (serializable=true, readOnly=true) makes no sense, so
there's no need to support it (I think iBATIS for Java ignores the
serializable setting if readonly is true).

Cheers,
Clinton

On Tue, May 13, 2008 at 11:43 AM, Clinton Begin <[EMAIL PROTECTED]> wrote:
> Oooohhh....   So here's the thing...
>
>  If you tell iBATIS that:
>
>  A) The objects in the cache will be tinkered with (i.e. read-write,
>  NOT read-only), and
>  B) The objects are not serializable....
>
>  iBATIS has no choice but to localize the cache to your current
>  session.  That said, it should be the session scope (thread/web
>  request etc.), not the iBATIS request scope... Gilles (or anyone on
>  the .NET team)?
>
>  * If you want this cache to be shared among multiple users, and the
>  objects are meant to be updated/changed, then set readOnly= false and
>  serializable=true.
>
>  * If the objects are strictly read-only (immutable by design or by
>  practice, shared or othewise), then set read-only=true and
>  serializable=false.
>
>  * If this cache is only for your current session/user's current web
>  request (not to be confused with iBATIS' request scope --different),
>  or your read-write classes are simply not serializable, then I think
>  your configuration is right, but Gilles and the .NET team need to
>  either change that cacheKey.update(request.SessionScope) or explain
>  their thinking behind its being request scope.
>
>  I hope that makes sense, sorry for the complexity here.  We hope to
>  improve cache configuration in future versions.
>
>  You did a great job tracking down the cause though.  Nice work.  :-)
>
>  Clinton
>
>
>
>  On Tue, May 13, 2008 at 11:26 AM, Eva Kwan <[EMAIL PROTECTED]> wrote:
>  > Adding a parameter didn't seem to help.
>  >
>  >  I'm using version 1.6.1.  When I trace through the iBATIS source, 
> CachingStatement seems to be using the RequestScope as a part of the key for 
> my configuration, and the hashcode for request is different for each of my 
> select calls.
>  >
>  >                 private CacheKey GetCacheKey(RequestScope request)
>  >                 {
>  >                         ...
>  >
>  >                         if (!cacheModel.IsReadOnly && 
> !cacheModel.IsSerializable)
>  >                         {
>  >                                 cacheKey.Update(request);
>  >                         }
>  >                         return cacheKey;
>  >                 }
>  >
>  >  Thanks,
>  >  Eva
>  >
>  >
>  >
>  >
>  >  -----Original Message-----
>  >  From: Clinton Begin [mailto:[EMAIL PROTECTED]
>  >  Sent: Tuesday, May 13, 2008 11:14 AM
>  >  To: user-cs@ibatis.apache.org
>  >  Subject: Re: iBATIS read/write non-serialize cache
>  >
>  >  I think it might be the case of "no parameters"...   for kicks, add a
>  >  parameter to the query to see if that helps.  a simple
>  >  parameterClass="int" should works.
>  >
>  >  Also, which version are you using?  I thought this was fixed...
>  >
>  >  Clinton
>  >
>  >  On Tue, May 13, 2008 at 11:02 AM, Eva Kwan <[EMAIL PROTECTED]> wrote:
>  >  >
>  >  >
>  >  >
>  >  >
>  >  > I have a cache model set up like this:
>  >  >
>  >  >
>  >  >
>  >  >     <cacheModel id="FindAllCache" implementation="LRU" readOnly="false">
>  >  >
>  >  >       <flushInterval minutes="5"/>
>  >  >
>  >  >       <property name="CacheSize" value="2"/>
>  >  >
>  >  >     </cacheModel>
>  >  >
>  >  >
>  >  >
>  >  >     <select id="FindAll" extends="Base" resultMap="Result"
>  >  > cacheModel="FindAllCache">
>  >  >
>  >  >     </select>
>  >  >
>  >  >
>  >  >
>  >  > I have turned on iBATIS logging.  When I execute the select statement 
> more
>  >  > than once within one session, the logs say that there is a cache miss 
> each
>  >  > time.
>  >  >
>  >  >
>  >  >
>  >  > How do I get a read/write (per session) cache to work?
>  >
>

Reply via email to