<!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;">
    jBPM 5.1 in a real world web application
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/rahzel">rahzel</a> in <i>jBPM</i> - <a href="http://community.jboss.org/message/613004#613004">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 are writing a prototype based on Java EE 6 (JSF 2.0, EJB 3.1, JPA 2.0). Application Server is JBoss AS 6.1. The customer described his business processes (about 30) in BPMN 2.0. There are many business rules as well and he wants to configure the rules (not the processes) in the running system without developer assistance. We are evaluating jBPM 5.1 and Drools Expert/Guvnor 5.2 for this purpose. After reading the manuals and many threads in this forum and spending some days programming I have some questions. Mainly about the scope and lifecycle of the KnowledgeSession and long running business processes. Most answers you read are like &ldquo;it depends on the scenario&#8221;. So I try to describe our scenario.</p><p>Our target is to develop a business (web) application for an administration department. There are about 100 parallel users. The business processes consists of many nodes (average around 10) including user tasks, business rule tasks, service tasks, gateways and timers. The business use cases respectively the user interface are task centric. For example a process instance is started by a user or within another process execution, the process instance runs in a user task and generates a task which is displayed in a specific task list. Another user logs in, completes the tasks and the process instance proceeds. After that it runs maybe into a business rule task and after that again in a user task generating another type of task. Thus the processes are long running (several days or even weeks).</p><p>Everything has to be persistent. After a failure or maintenance reboot every process instance has to be in the state before the reboot.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span style="font-size: 12pt;"><strong>KnowledgeSession Scope</strong></span></p><p>I can&rsquo;t really determine in which Scope (per request, per user session, per application, per process instance) to instantiate the KnowledgeSession. I have some questions to narrow down the choice:</p><p><strong>Question 1</strong>: Is the session thread safe? If not application scope wouldn&rsquo;t be an option.</p><p><strong>Question 2</strong>: What&rsquo;s about facts (input/output data for business rules)? I it reliable to work with only one session (application scope) which manages many running process instances involving business rule tasks? I fear that&rsquo;s not the case, because facts are added to the session. Thus the result would be unreliable if multiple parallel rule executions run in one session.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span style="font-size: 12pt;"><strong>KnowledgeSession persistence</strong></span></p><p>I don&rsquo;t know if it is required to load and reuse persisted sessions after a server reboot. The KnowledgeSession and process instances both get persisted. I implemented an example where I have some process instances in a wait state (human task). When I restart the server and create a new session I can complete a human task and the process instance proceeds. Thus it seems that a persisted process instance is independent from a concrete session.</p><p><strong>Question 3</strong>: Is there a reason to load and reuse persisted sessions after a server reboot? If yes and if I have more than one session (for example because I use one session per http request) how would I know which session to load concerning a specific wait state? When I complete a task I don&rsquo;t know which session was active as the process instance hit the wait state.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span style="font-size: 12pt;"><strong>Timers</strong></span></p><p><strong>Question 4</strong>: Is it true that timers are not persistent? See <a class="jive-link-external-small" href="https://issues.jboss.org/browse/JBPM-3170">https://issues.jboss.org/browse/JBPM-3170</a>. Thus I have to use an external timer service if I want to implement long running processes with timers? Any ideas?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span style="font-size: 12pt;"><strong>Summary</strong></span></p><p><span lang="EN-US" style="font-family: arial,helvetica,sans-serif; font-size: 10pt;"><strong>Question 5</strong>: Considering the above topics, what would be the best practice to deal with the KnowledgeSession?</span></p><p style="min-height: 8pt; height: 8pt; padding: 0px;"><span lang="EN-US" style="font-family: arial,helvetica,sans-serif; font-size: 10pt;"></span>&#160;</p><p><span lang="EN-US" style="font-family: arial,helvetica,sans-serif; font-size: 10pt;">Thanks in advance!</span></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/613004#613004">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>