<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Lost update problem...
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/dubacher">Marco Dubacher</a> in <i>JBoss Cache</i> - <a href="http://community.jboss.org/message/564660#564660">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hi there.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I have the problem that to threads want to create the new same node with the same key but different value at the same time. The value set by the threads depend on the value already set in the cache.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So each thread does the following.</p><p>1. Get the value for a fqn/key in the cache (i.e. returns the value 5)</p><p>2. Increment the value by a certain value (i.e. 5 + 3 = 8)</p><p>3. Put the value back in the cache (i.e. 8).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>At the moment the JBossCache ist configured as follows:</p><p>Mode = local</p><p>Transaction = yes.</p><p>IsolationLevel = Repeatable_Read</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Now if the node for the given fqn/key exists we are able to detect concurrent write conflicts by enabling "WriteSkewCheck". But initially for the given fqn/key no node does exist. If to threads happend to create this fqn/key at the same time we have the following scenario.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thread 1: Start Transaction</p><p>Thread 1: Get the node with fqn/key. Null is returned.</p><p>Thread 1: Create a new node an puts it into the cache by calling cache.put(Fqn.fromString("mynode"), 1, 3) whereas 1 is the key and 3 the value.</p><p>Thread 2: Start Transaction</p><p>Thread 2: Get the node with fqn/key. Null is returned as we have transaction isolation...</p><p>Thread 2: Create a new node an puts it into the cache by calling cache.put(Fqn.fromString("mynode"), 1, 5). The thread has to wait because of write lock of thread 2.</p><p>Thread 1: Commit transaction</p><p>Thread 2: Receives lock (before running into TimeoutException) and writes the value 5 in the cache.</p><p>Thread 2: Commit transaction.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So now we have for the given fqn/key the value 5 in the cache, whereas the correct result should be 8 (= 3 + 5). So we have a lost update problem.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>My question: How do you solve such a problem with JBossCache? I tried using Interceptors etc. but didn't succeed up to now...</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I you need more information I am happy to give you more detailled explanations.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>cheers,</p><p>marco</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/564660#564660">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Cache at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2052">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>