[ 
https://issues.apache.org/jira/browse/OFBIZ-5534?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14044913#comment-14044913
 ] 

Adam Heath commented on OFBIZ-5534:
-----------------------------------

What don't you like about it?  We can't modify the delegator; external code 
uses the Cache class directly.  This is the only way to store built-up objects 
into the entity condition list classes.

I don't think you are understanding my approach, because what you outlined as 
the way to do things, is how it is being done.  I'm just doing it in Cache, not 
GenericDelegator.

ps: Currently, my implementation has issues if transactions are suspended and 
resumed.  The only way to fix that would be to use XAResource, but there is no 
way to prevent duplication enlistResource calls that is not hackish.

pps: I know that my impl isn't visible yet anywhere.  I don't have time to 
place it someplace that is easy to look at right now.

> Dirty reads from entity cache
> -----------------------------
>
>                 Key: OFBIZ-5534
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-5534
>             Project: OFBiz
>          Issue Type: Bug
>          Components: framework
>    Affects Versions: Release Branch 11.04, SVN trunk, Release Branch 12.04, 
> Release Branch 13.07
>            Reporter: Jacopo Cappellato
>            Assignee: Adam Heath
>         Attachments: unittest-dirtyreadsfromcache.patch
>
>
> Even if database transaction isolation level is set to "ReadCommitted", a 
> transaction can get uncommitted records from the entity cache, under certain 
> circumstances.
> Here is a test case:
> 1) transaction T1 creates a record
> 2) T1 calls findOne to retrieve it: the read will be successful (because T1 
> can read data generated in T1 even if not committed) and the record will be 
> added to the cache
> 3) T1 calls another service with requireNewTransaction set to true: this will 
> run the second service in a new transaction T2
> 4) T2 calls findOne to retrieve the record created by T1: if useCache is set 
> to false it should fail; if useCache is set to true it will succeed (getting 
> the record from cache, even if the data is not committed to the db)
> The result in #4 is wrong because T2 should not see the uncommitted record
> We should never add uncommitted records to the entity cache.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to