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

Adrian Crum commented on OFBIZ-5534:
------------------------------------

My description might not be clear to those who aren't familiar with the 
framework transaction-handling code. With the current design, the first bit of 
code to update the datasource holds a boolean value indicating it started the 
transaction. Other bits of code that update the datasource will invoke a commit 
method, but it does nothing because those bits of code did not start the 
transaction. When program execution returns to the first bit of code and it 
invokes the commit method, the commit is actually performed on the datasource - 
because that bit of code started the transaction.

So, even when you see code that calls a commit method, the transaction might 
not be actually committed, but instead the update is logged and deferred until 
the real commit is performed.


> 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
>         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.1.5#6160)

Reply via email to