<!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;">
    Map based persistence doubt
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/chrismarm">Christian Marmolejo</a> in <i>jBPM</i> - <a href="https://community.jboss.org/message/756068#756068">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 everyone</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In my current project I need to persist active processes on demand before application shutdown and reload them at a later time. For simplicity, persistence should use binary files to store serialized process and session information, so databases are not intended to be used. In this scenario I think that a map based persistence solution might be appropiate.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I have found very little info about jBPM persistence in general and even less about map based persistence, so I have tried to understand the test cases in source code with no success. I added a test case in MapPersistenceTest.java for a very simple process: Start --&gt; Script --&gt; EventNode --&gt; Script --&gt; EventNode --&gt; Script --&gt; End. Scripts are only used to print out some "debug" info. The code is (class MapBasedPersistenceTest.java has no changes):</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160; @Test</p><p>&#160;&#160;&#160; public void fullCustomTest()</p><p>&#160;&#160;&#160; {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; String processId = "com.telvent.prueba";</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; String eventType = "PrimeraSenal";</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; String eventType2 = "SegundaSenal";</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; KnowledgeBase kbase = createKBase();</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; StatefulKnowledgeSession crmPersistentSession = createSession(kbase);</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; org.drools.runtime.process.ProcessInstance process = crmPersistentSession.startProcess(processId);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; long processInstanceId = process.getId();</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Assert.assertEquals(ProcessInstance.STATE_ACTIVE, process.getState()); </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; crmPersistentSession.signalEvent(eventType, null);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; process = crmPersistentSession.getProcessInstance(processInstanceId);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Assert.assertNotNull(process); </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; int sessionId = crmPersistentSession.getId();</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; StatefulKnowledgeSession crmPersistentSession2 = disposeAndReloadSession(crmPersistentSession, sessionId, kbase);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; crmPersistentSession2.signalEvent(eventType2, null); </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; process = crmPersistentSession2.getProcessInstance(processInstanceId);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Assert.assertNull(process);</p><p>&#160;&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160; private KnowledgeBase createKBase()</p><p>&#160;&#160;&#160; {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; kbuilder.add(ResourceFactory.newClassPathResource("com/telvent/SampleProcess.bpmn"), ResourceType.BPMN2);&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; KnowledgeBase kbase = kbuilder.newKnowledgeBase();</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return kbase;</p><p>&#160;&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>After the first signalEvent, the second script is executed properly but after reloading the session and firing the second signal, I expected the last script to be fired and the process finished. However, the last script isn't reached and the second assert fails as the process still waits for the first signal, not the second one. Could anyone explain what I am doing wrong?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thanks in advance</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/756068#756068">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>