<!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;">
    jbpm 5.3 - kSession.dispose() - Error: Session was previously disposed
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/pgoncalves">Pedro Gonçalves</a> in <i>jBPM</i> - <a href="https://community.jboss.org/message/745092#745092">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>I'm using jbpm5.3, with spring and hibernate.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In the method I use to start a process instance, if I use the kSession.dispose() it will give me the error below, but if not, it will work well! (The application was just started, so no kSessions used before, and the database was clean)</p><p>It is not supposed to call dispose() when kSession will not be used anymore (I have one kSession per process instance).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>When I call kSession.dispose() for the first time, I got the error:</p><pre class="jive-pre"><code class="jive-code jive-java">java.lang.IllegalStateException: Illegal method call. This session was previously disposed.
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.reteoo.DisposedReteooWorkingMemory.getProcessRuntime(DisposedReteooWorkingMemory.java:270)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.impl.StatefulKnowledgeSessionImpl.getProcessRuntime(StatefulKnowledgeSessionImpl.java:874)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.persistence.SingleSessionCommandService$SynchronizationImpl.afterCompletion(SingleSessionCommandService.java:448)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.persistence.jta.JtaTransactionSynchronizationAdapter.afterCompletion(JtaTransactionSynchronizationAdapter.java:25)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at bitronix.tm.BitronixTransaction.fireAfterCompletionEvent(BitronixTransaction.java:497)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at bitronix.tm.BitronixTransaction.rollback(BitronixTransaction.java:283)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at bitronix.tm.BitronixTransactionManager.rollback(BitronixTransactionManager.java:129)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.springframework.transaction.jta.JtaTransactionManager.doRollback(JtaTransactionManager.java:1037)
(......)
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>How I start the process instance:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> startProcess(CoreData coreData, String definitionId) <font color="navy">{</font>
&#160;
 <font color="darkgreen">//Creating variables ...</font>
(...)
&#160;&#160;&#160;&#160; <font color="darkgreen">//taskService is a spring bean</font>
&#160;&#160;&#160;&#160; LocalTaskService localTaskService = <font color="navy"><b>new</b></font> LocalTaskService(taskService);
&#160;
<font color="darkgreen">//GetKSession with null will create a new kSession</font>
&#160;&#160;&#160;&#160; StatefulKnowledgeSession kSession = getKSession(null, localTaskService);
&#160;&#160;&#160;&#160; JPAWorkingMemoryDbLogger jbpmLogger = <font color="navy"><b>new</b></font> JPAWorkingMemoryDbLogger(kSession);
&#160;
&#160;&#160;&#160;&#160; ProcessInstance processInstance = kSession.startProcess(definitionId, variables);
&#160;&#160;&#160;&#160; 
&#160;&#160;&#160;&#160; jbpmLogger.dispose();
<font color="darkgreen">//If I remove this kSession.dispose() it will work well, but will give a optimistic lock error later....</font>
&#160;&#160;&#160;&#160; kSession.dispose();
<font color="navy">}</font>
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>How I create the kSession:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>public</b></font> StatefulKnowledgeSession getKSession(Integer kSessionId, LocalTaskService localTaskService) <font color="navy">{</font>
&#160; 
&#160;&#160;&#160;&#160; StatefulKnowledgeSession kSession;
&#160; 
&#160;&#160;&#160;&#160; Environment env = KnowledgeBaseFactory.newEnvironment();
&#160;&#160;&#160;&#160; env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, entityManagerWorkflow.getEntityManagerFactory());
&#160;&#160;&#160;&#160; env.set(EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager());
&#160;
&#160;&#160;&#160;&#160; <font color="navy"><b>if</b></font> (kSessionId == <font color="navy"><b>null</b></font>) <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; kSession = JPAKnowledgeService.newStatefulKnowledgeSession(knowledgeBaseProvider.getKbase(), null, env);
&#160;&#160;&#160;&#160; <font color="navy">}</font> <font color="navy"><b>else</b></font> <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; kSession = JPAKnowledgeService.loadStatefulKnowledgeSession(kSessionId, knowledgeBaseProvider.getKbase(), null, env);
&#160;&#160;&#160;&#160; <font color="navy">}</font>
<font color="darkgreen">/*
* Adding Listner
* */</font>
&#160;&#160;&#160;&#160; CustomProcessEventListener customProcessEventListener = <font color="navy"><b>new</b></font> CustomProcessEventListener();
&#160;&#160;&#160;&#160; kSession.addEventListener(customProcessEventListener);
&#160;
<font color="darkgreen">/*
* Register WorkItemHandler
* */</font>
&#160;&#160;&#160;&#160; GenericHTWorkItemHandler handler = <font color="navy"><b>new</b></font> GenericHTWorkItemHandler(kSession);
&#160;&#160;&#160;&#160; handler.setClient(localTaskService);
&#160;&#160;&#160;&#160; handler.setLocal(<font color="navy"><b>true</b></font>);
&#160;&#160;&#160;&#160; handler.setIpAddress(<font color="red">"127.0.0.1"</font>);
&#160;&#160;&#160;&#160; handler.setPort(9123);
&#160;&#160;&#160;&#160; handler.connect();
&#160;&#160;&#160;&#160; kSession.getWorkItemManager().registerWorkItemHandler(<font color="red">"Human Task"</font>, handler);
&#160;
&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> kSession;
<font color="navy">}</font>
&#160;
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thanks</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/745092#745092">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>