ibatis-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Reuben Firmin (JIRA)" <ibatis-...@incubator.apache.org>
Subject [jira] Created: (IBATIS-251) Beans in cache can be changed without persistence
Date Fri, 03 Feb 2006 17:36:04 GMT
Beans in cache can be changed without persistence

         Key: IBATIS-251
         URL: http://issues.apache.org/jira/browse/IBATIS-251
     Project: iBatis for Java
        Type: Bug
  Components: SQL Maps  
    Versions: 2.1.6    
 Environment: Resin 3/Linux/Spring
    Reporter: Reuben Firmin

The following code illustrates the problem:

Foo foo1 = dao.getFoo(fooId);
try {
} catch (Exception e) {
    Foo foo2 = dao.getFoo(fooId);
    if (foo2.getBah())
        System.err.println("The bug!");

Assume the dao method throws an exception due to validation failure, prior to any calls being
made to the database.

The problem is that because a reference foo1 is obtained from the dao (which uses the built
in caching), we are now pointing to the same bean that is in the cache. So, even if we don't
persist foo1 to the database, the cached copy of foo1 contains the mutated properties; system
wide, our change is instantly propagated. This is IMO a pretty serious issue.

A fix would be to make the cache return cloned beans, or have the cache build new beans based
on the setter/getter properties; or similar. In any case, the desired effect is that the bean
that the cache references NOT be mutatable by the rest of the system.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message