You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Reuben Firmin (JIRA)" <ib...@incubator.apache.org> on 2006/02/03 18:36:04 UTC
[jira] Created: (IBATIS-251) Beans in cache can be changed without
persistence
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);
foo1.setBah(true);
try {
dao.updateFoo(foo1);
} 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:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
[jira] Closed: (IBATIS-251) Beans in cache can be changed without
persistence
Posted by "Clinton Begin (JIRA)" <ib...@incubator.apache.org>.
[ http://issues.apache.org/jira/browse/IBATIS-251?page=all ]
Clinton Begin closed IBATIS-251:
--------------------------------
Resolution: Invalid
Assign To: Clinton Begin
This is already handled by using the readOnly and/or serialize flags
Page 32 of the user guide.
http://internap.dl.sourceforge.net/sourceforge/ibatisdb/iBATIS-SqlMaps-2.pdf
For what you're doing, I'd suggest readOnly="false" and serialize="true"
Remember, all of your beans will need to implement Serializable.
Cheers,
Clinton
> 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
> Assignee: Clinton Begin
>
> The following code illustrates the problem:
> Foo foo1 = dao.getFoo(fooId);
> foo1.setBah(true);
> try {
> dao.updateFoo(foo1);
> } 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:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira