<!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="https://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;">
    JPAWorkingMemoryDbLogger logs inconsistent data in case the process instance flow starts and terminates in single thread
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/rahulamt">Rahul Agrawal</a> in <i>jBPM</i> - <a href="https://community.jboss.org/message/762097#762097">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>When a process is defined such that there are no wait-states in the flow i.e. the process instance flow will be completed in the same thread, in which it is started, the JPAWorkingMemoryDbLogger is not recording the end data for that particular ProcessInstanceLog.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>One more point: I am starting the transaction and commiting it.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>More analysis reveals that </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In case of start and completion of the process instance in the single thread the below method will execute the query. </p><p>But as the transaction is not commited the query is unable to find the processinstancelog object.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>private void updateProcessLog(long processInstanceId) {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; List&lt;ProcessInstanceLog&gt; result = getEntityManager().createQuery(</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "from ProcessInstanceLog as log where log.processInstanceId = ? and log.end is null")</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .setParameter(1, processInstanceId).getResultList();</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (result != null &amp;&amp; result.size() != 0) {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ProcessInstanceLog log = result.get(result.size() - 1);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; log.setEnd(new Date());</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; getEntityManager().merge(log);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p><p>}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>My work-around is to have a map field JPAWorkingMemoryDbLogger inside this class it will store the processInstanceLog object created against the processInstanceId and inside the above method if query is unable to find the object, use the object from the map. If the EntityManager is able to find processInstanceLog, remove it from the map.</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="https://community.jboss.org/message/762097#762097">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in jBPM at <a href="https://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>