<!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;">
    Re: jBPM 5.1 in a real world web application
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/KrisVerlaenen">Kris Verlaenen</a> in <i>jBPM</i> - <a href="http://community.jboss.org/message/613360#613360">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Regarding the scope of the session:&#160; the session itself is threadsafe, and especially when using persistence, we make sure multiple threads are not changing the same data (as this would only result in conflicts anyway).&#160;&#160; Depending on the required performance, it might be possible to simply use one session to run all requests.&#160; In this case however, I would recommend using one session per case (where a case is long-lived so could span multiple requests and multiple process instances but typically is about one isolated set of data).&#160; The main reason is that this will prevent data from other unrelated cases to influence your execution, which is especially possible once you start using rule tasks.&#160; So whenever a request comes in, look up the related case id somehow and try to reload the session from the database (or create a new session if this is a new case).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Regarding reloading the sessions, the only thing you should make sure of is that, if you use timers, that the timers are actually re-registered (so this automatically leads to question 4), as timers are part of the session state, and those timers will only trigger if that session is active.&#160; There are a few possible approaches here: (1) use a centralized session to put your timers in, and make sure that session is restored after reboot, so that timers will still trigger on that session, or (2) use some kind of persistent timer trigger (like quartz) that would reactivate the session if a timer would need to trigger (we have some community work on this as an extension of the normal timer service but it's not completely integrated yet).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So I would recommend using a session per case and simply disposing your session once you're done processing the request, and the session will simply be reloaded for the next request for that case.&#160; And registering all timers to a centralized session before disposing the session so that they still get triggered if the session is disposed, and simply restoring that session in case of restart.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Hope this helps,</p><p><br/>Kris</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/613360#613360">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>