<!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;">
    Running Business Rule in a Multi Threaded Environment (JEE)
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/vyasmehul">Mehul Vyas</a> in <i>jBPM</i> - <a href="https://community.jboss.org/message/806005#806005">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hello,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>We are using JBoss BRMS 5.3 on Websphere Application Server 8.x. We are using batch processing framework and hence on J2EE environment there would be multiple instances of a job processing data. Now the issue is that the processing framework we use supports parallel job execution. The same is probably not supported in JBoss BRMS due to which while executing business rule in a parallel mode the following exception is seen. The code to execute business rule is as below:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>knowledgeBase = knowledgeAgent.getKnowledgeBase();</p><p>statefulKnowledgeSession = knowledgeBase</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.newStatefulKnowledgeSession();</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>statefulKnowledgeSession.getAgenda().getAgendaGroup(agendaName)</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.setFocus();</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>if (!commands.isEmpty()) {</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// execute the business rule</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;commands.add(CommandFactory.newFireAllRules());</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;executionResults = statefulKnowledgeSession</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.execute(CommandFactory.newBatchExecution(commands));</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span style="font-size: 10pt;"> </span><span style="font-size: 10pt; color: black; font-family: Calibri, sans-serif;">at in.gov.tds.util.JbrmsUtil.executeBusinessRule(JbrmsUtil.java:230)</span></p><p><span style="color: black; font-family: Calibri, sans-serif; font-size: 10pt;"> at in.gov.tds.processing.bo.impl.DefaultProcessingBOImpl.getInterestRate(DefaultProcessingBOImpl.java:192)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at in.gov.tds.processing.batchprocessor.DefaultAndInterestComputationBatchProcessor.getInterestRateMap(DefaultAndInterestComputationBatchProcessor.java:931)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at in.gov.tds.processing.batchprocessor.DefaultAndInterestComputationBatchProcessor.processRecord(DefaultAndInterestComputationBatchProcessor.java:292)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.websphere.batch.devframework.steps.technologyadapters.GenericXDBatchStep.processRecord(GenericXDBatchStep.java:263)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.websphere.batch.devframework.steps.technologyadapters.GenericXDBatchStep.processJobStep(GenericXDBatchStep.java:227)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.gridcontainer.batch.impl.StepManagerImpl._regularJobBatchLoop(StepManagerImpl.java:1200)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.gridcontainer.batch.impl.StepManagerImpl.executeStep(StepManagerImpl.java:368)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.gridcontainer.security.actions.ExecuteStepBatchUserPrivilegedAction.executeAction(ExecuteStepBatchUserPrivilegedAction.java:47)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.gridcontainer.security.AbstractUserPrivilegedAction.runWithoutSecurity(AbstractUserPrivilegedAction.java:66)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.gridcontainer.services.impl.WASRunUnderCredentialServiceImpl.runUnderUserCredential(WASRunUnderCredentialServiceImpl.java:134)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.gridcontainer.services.impl.WASRunUnderCredentialServiceImpl.runActionUnderUserCredential(WASRunUnderCredentialServiceImpl.java:386)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.gridcontainer.batch.impl.JobManagerImpl._sequentialStepScheduling(JobManagerImpl.java:746)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.gridcontainer.batch.impl.JobManagerImpl.executeJob(JobManagerImpl.java:198)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.batch.BatchJobControllerWork._runJob(BatchJobControllerWork.java:299)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.batch.BatchJobControllerWork.run(BatchJobControllerWork.java:219)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:269)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at java.security.AccessController.doPrivileged(AccessController.java:229)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:795)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:222)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at com.ibm.ws.asynchbeans.ABWorkItemImpl.run(ABWorkItemImpl.java:206)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at java.lang.Thread.run(Thread.java:770)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;">Caused by: java.util.NoSuchElementException</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at java.util.LinkedList.getLast(LinkedList.java:548)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.common.DefaultAgenda.getNextFocus(DefaultAgenda.java:607)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1020)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1251)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:737)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:701)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:106)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:32)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:155)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:76)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.impl.StatefulKnowledgeSessionImpl.execute(StatefulKnowledgeSessionImpl.java:809)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at org.drools.impl.StatefulKnowledgeSessionImpl.execute(StatefulKnowledgeSessionImpl.java:781)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> at in.gov.tds.util.JbrmsUtil.executeBusinessRule(JbrmsUtil.java:220)</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"> ... 21 more</span></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span style="font-family: 'Calibri','sans-serif'; color: black;">1) Is this known? Can we change the code to make it synchronized and hence to make it thread safe?</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;">2) Is this known issue? Are there any workaround to resolve this issue other than changing code to make it synchronized because J2EE environment is thread safe?</span></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span style="font-family: 'Calibri','sans-serif'; color: black;">Thanks,</span></p><p><span style="font-family: 'Calibri','sans-serif'; color: black;">Mehul<br/></span></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span style="font-family: 'Calibri','sans-serif'; color: black;"><br/></span></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/806005#806005">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>