ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Håkan Andersson <hakan.anders...@evertiq.com>
Subject Re: Cache in iBATIS 3.0
Date Mon, 07 Sep 2009 14:47:37 GMT
Added JIRA https://issues.apache.org/jira/browse/IBATIS-647
and yes, commit(true) helps :)

Best Regards
Håkan Andersson


On 07/09/09 16:22, Clinton Begin wrote:
> Ah... interesting.  This is a bug.  The cache in iBATIS is
> transactional.  iBATIS also has a "feature" that only commits a
> transaction if a change was detected.  These two features are
> conflicting.  Since selects don't count as a "change", the transactional
> cache never flushes.  
> 
> If you call session.commit(true), you'll probably see calls to putObject.
> 
> Can you please file a JIRA ticket for this?
> 
> Thanks much!
> 
> 2009/9/7 Håkan Andersson <hakan.andersson@evertiq.com
> <mailto:hakan.andersson@evertiq.com>>
> 
>     Hi
> 
>     Sorry for being unclear, I will try to explain a little better what I
>     have done.
> 
>     I have a fully working web application with the latest ibatis beta
>     3.0.0.200 and what I did was to add <cache type="db.TestCache" /> to a
>     mapper, TestCache implements org.apache.ibatis.cache.Cache but at the
>     moment it only have logging statements, if I'm not horribly mistaken I
>     will see a "in putObject()" if hasKey() is false but I don't.
> 
>     My test class
>     public class TestCache implements Cache {
> 
>            static Logger log = Logger.getLogger(TestCache.class);
> 
>            private String id;
>            private ReadWriteLock readWriteLock = new
>     ReentrantReadWriteLock();
> 
>            /**
>             * @param id
>             */
>            public TestCache(String id) {
>                    super();
>                    this.id <http://this.id> = id;
>            }
> 
>            @Override
>            public void clear() {
>                    if (log.isDebugEnabled()) {
>                            log.debug("in clear()");
>                    }
> 
>            }
> 
>            @Override
>            public String getId() {
>                    if (log.isDebugEnabled()) {
>                            log.debug("in getId()");
>                    }
> 
>                    return this.id <http://this.id>;
>            }
> 
>            @Override
>            public Object getObject(Object obj) {
>                    if (log.isDebugEnabled()) {
>                            log.debug("in getObject()");
>                    }
> 
>                    return "";
>            }
> 
>            @Override
>            public ReadWriteLock getReadWriteLock() {
>                    if (log.isDebugEnabled()) {
>                            log.debug("in getReadWriteLock()");
>                    }
> 
>                    return this.readWriteLock;
>            }
> 
>            @Override
>            public int getSize() {
>                    if (log.isDebugEnabled()) {
>                            log.debug("in getSize()");
>                    }
> 
>                    return 0;
>            }
> 
>            @Override
>            public boolean hasKey(Object obj) {
>                    if (log.isDebugEnabled()) {
>                            log.debug("in hasKey()");
>                    }
>                    return false;
>            }
> 
>            @Override
>            public void putObject(Object arg0, Object arg1) {
>                    if (log.isDebugEnabled()) {
>                            log.debug("in putObject()");
>                    }
>            }
> 
>            @Override
>            public Object removeObject(Object arg0) {
>                    if (log.isDebugEnabled()) {
>                            log.debug("in removeObject()");
>                    }
> 
>                    return null;
>            }
>     }
> 
> 
>     The logging shows
>     DEBUG java.sql.Connection  - ooo Connection Opened
>     DEBUG db.TestCache  - in getReadWriteLock()
>     DEBUG db.TestCache  - in getReadWriteLock()
>     DEBUG db.TestCache  - in hasKey()
>     DEBUG db.TestCache  - in getReadWriteLock()
>     DEBUG java.sql.PreparedStatement  - ==> Executing: (removed)
>     DEBUG java.sql.ResultSet  - <== ResultSet Returned
>     DEBUG java.sql.ResultSet  - <== Columns: (removed)
>     DEBUG java.sql.ResultSet  - <== Row: (removed)
>     DEBUG java.sql.ResultSet  - <== Row: (removed)
>     DEBUG db.TestCache  - in getReadWriteLock()
>     DEBUG java.sql.Connection  - xxx Connection Closed
> 
> 
> 
>     Best Regards
>     Håkan Andersson
> 
> 
>     On 06/09/09 09:21, Clinton Begin wrote:
>     > I'm not quite sure about your question...
>     >
>     >   * What are you referring to when you say "the custom cache" -- I'm
>     > assuming that's something you've implemented.
>     >
>     >   * How are you hooking it into your statements?
>     >
>     >   * Can you provide a simple unit test to demonstrate the behavior
>     (e.g.
>     > you could just use a simple hashmap implementation).
>     >
>     > Cheers,
>     > Clinton
>     >
>     > 2009/9/3 Håkan Andersson <hakan.andersson@evertiq.com
>     <mailto:hakan.andersson@evertiq.com>
>     > <mailto:hakan.andersson@evertiq.com
>     <mailto:hakan.andersson@evertiq.com>>>
>     >
>     >     Hi
>     >
>     >     I have been playing a little with the custom cache in ibatis
>     3.0 Beta 3,
>     >     but I can't see that the putObject is fired, is there any special
>     >     condition that needs to be fulfilled before it will happen?
>     >     hasKey, getObject and getReadWriteLock all get fired when it
>     should but
>     >     not putObject.
>     >
>     >
>     >     Best Regards
>     >     Håkan Andersson
>     >
>     >
>     >    
>     ---------------------------------------------------------------------
>     >     To unsubscribe, e-mail:
>     user-java-unsubscribe@ibatis.apache.org
>     <mailto:user-java-unsubscribe@ibatis.apache.org>
>     >     <mailto:user-java-unsubscribe@ibatis.apache.org
>     <mailto:user-java-unsubscribe@ibatis.apache.org>>
>     >     For additional commands, e-mail:
>     user-java-help@ibatis.apache.org
>     <mailto:user-java-help@ibatis.apache.org>
>     >     <mailto:user-java-help@ibatis.apache.org
>     <mailto:user-java-help@ibatis.apache.org>>
>     >
>     >
> 
>     ---------------------------------------------------------------------
>     To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>     <mailto:user-java-unsubscribe@ibatis.apache.org>
>     For additional commands, e-mail: user-java-help@ibatis.apache.org
>     <mailto:user-java-help@ibatis.apache.org>
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
For additional commands, e-mail: user-java-help@ibatis.apache.org


Mime
View raw message