<!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;">
    Multiple JBPM4_VARIABLE records pointing to same LOB_ and different EXECUTIONID_
</h3>
<span style="margin-bottom: 10px;">
    reply from <a href="http://community.jboss.org/people/imjorge">Jorge Ferreira</a> in <i>jBPM</i> - <a href="http://community.jboss.org/message/549542#549542">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>We have found the cause of the problem.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Basically jBPM was reusing the same block of identifiers as can be seen by the following two log lines:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><div id="_mcePaste">73099 2010-06-24 16:40:54,018 DEBUG [org.jbpm.pvm.internal.id.DatabaseDbidGenerator] acquired new id block [2610001-2620000]</div><div id="_mcePaste">75993 2010-06-24 17:22:05,254 DEBUG [org.jbpm.pvm.internal.id.DatabaseDbidGenerator] acquired new id block [2610001-2620000]</div><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>That caused all sort of strange behavior. Now why is this happing? First let me talk about our environment setup.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>We use jBPM as part of an EAR application deployed in jBOSS. Because we did not want to manage different databases we deployed the jBPM tables in our application database. So a single database with both application tables and jBPM tables.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The problem happens with very specific conditions, as one could expected, and is due to the nature of <a class="jive-link-external-small" href="http://en.wikipedia.org/wiki/Nested_transaction">nested transactions</a>.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>DatabaseDbIdGenerator picks a new block of ids inside a transaction. But because this can happen from an EJB call it will be a nested transaction.</p><blockquote class="jive-quote">Nested transactions are implemented differently in databases. However, they have in common that the changes are not made visibile to any unrelated transactions until the outermost transaction has committed. This means that a commit in an inner transaction does not necessary persist updates to the database.</blockquote><p>The problem only happens if the block generation happens in a nested transaction and the outer transaction - that would commit definitely the results of the nested transaction - rollbacks for some reason.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><ol><li>start transaction<ol><li>start jbpm transaction for block generation<ol><li>get current nextid from jbpm4_property - nextid = 1</li><li>update nextid in jbpm4_property - nextid = 100001</li></ol></li><li>commit jbpm transaction</li><li>[...]</li><li>some error that causes an exception that means rollback</li></ol></li><li>rollback transaction - nextid = 1</li></ol><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Because the ultimate result will be to rollback the transaction the block that jBPM THINKS that is on the database is now incorrect. But it still holds that block in memory and uses it to assign ids. The next time a block generation happens the ids will start to be repeated. Perhaps a check SHOULD be added in DatabaseDbIdGenerator to ensure that the nextId returned from the database is after the lastId consumed?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><strong>Our solution:</strong> implement a custom id generator that uses an independent transaction and hook it up using jbpm.default.cfg.xml.</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/549542#549542">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in jBPM at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


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

</div>

</body>
</html>