<!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;">
    fireUntilHalt with customworkhandler
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/hina">Hina Agarwal</a> in <i>jBPM</i> - <a href="http://community.jboss.org/message/626196#626196">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>If we use cutom workitem handler as mentioned below and fireUntilhalt to invoke rules in reactive mode. While debugging, I found that before completing first task(line in blue &amp; bold), it fires the rule which is active. After running of rule, it get back to end of completeworkitem.It creates a problem an thrpw an exception mentioned below.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>WorkItemHandler</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>public</b></font> <font color="navy"><b>class</b></font> MyHumanChangingValuesSimulatorWorkItemHandler <font color="navy"><b>implements</b></font> WorkItemHandler <font color="navy">{</font>
&#160;&#160;&#160; <font color="navy"><b>private</b></font> <font color="navy"><b>static</b></font> <font color="navy"><b>int</b></font> counter = 1;
&#160;&#160;&#160; <font color="navy"><b>private</b></font> WorkItemManager workItemManager;
&#160;&#160;&#160; <font color="navy"><b>private</b></font> <font color="navy"><b>long</b></font> workItemId;
&#160;&#160;&#160; <font color="navy"><b>private</b></font> Map&lt;String, Object&gt; results;
&#160;&#160;&#160; <font color="navy"><b>private</b></font> Emergency currentEmergency;
&#160;
&#160;&#160;&#160; <font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> executeWorkItem(WorkItem workItem, WorkItemManager workItemManager) <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.workItemId = workItem.getId();
&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.workItemManager = workItemManager;
&#160;&#160;&#160;&#160;&#160;&#160;&#160; currentEmergency = (Emergency) workItem.getParameter(<font color="red">"emergency"</font>);
&#160;&#160;&#160;&#160;&#160;&#160;&#160; currentEmergency.setRevision(currentEmergency.getRevision() + counter);
&#160;
&#160;
&#160;&#160;&#160; <font color="navy">}</font>
&#160;
&#160;&#160;&#160; <font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> abortWorkItem(WorkItem workItem, WorkItemManager workItemManager) <font color="navy">{</font>
&#160;
&#160;&#160;&#160; <font color="navy">}</font>
&#160;
&#160;&#160;&#160; <font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> completeWorkItem() <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160;&#160;&#160; results = <font color="navy"><b>new</b></font> HashMap&lt;String, Object&gt;();
&#160;&#160;&#160;&#160;&#160;&#160;&#160; results.put(<font color="red">"emergency"</font>, currentEmergency);
&#160;&#160; &#160;&#160;&#160;&#160; workItemManager.completeWorkItem(workItemId, results);
&#160;
&#160;&#160;&#160; <font color="navy">}</font>
&#160;
&#160;
<font color="navy">}</font>
&#160;
&#160;
&#160;
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Exception:</p><pre class="jive-pre"><code class="jive-code jive-java">0&#160;&#160;&#160; 13/09 15:13:39,598[Thread-6] ERROR hibernate.util.JDBCExceptionReporter.logExceptions - error requeueing a JdbcPooledConnection from datasource jdbc/testDS in state ACCESSIBLE wrapping xads1: url=jdbc:h2:mem:mydb user=root
Hibernate: update ProcessInstanceInfo set lastModificationDate=?, lastReadDate=?, processId=?, processInstanceByteArray=?, startDate=?, state=?, OPTLOCK=? where InstanceId=? and OPTLOCK=?
3&#160;&#160;&#160; 13/09 15:13:39,601[Thread-6] ERROR hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException - Unable to mark <font color="navy"><b>for</b></font> rollback on PersistenceException: 
java.lang.IllegalStateException: no transaction started on <font color="navy"><b>this</b></font> thread
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at bitronix.tm.BitronixTransactionManager.setRollbackOnly(BitronixTransactionManager.java:123)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.ejb.AbstractEntityManagerImpl.markAsRollback(AbstractEntityManagerImpl.java:421)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:576)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:202)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.persistence.JpaProcessPersistenceContext.findProcessInstanceInfo(JpaProcessPersistenceContext.java:26)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.persistence.processinstance.JPAProcessInstanceManager.getProcessInstance(JPAProcessInstanceManager.java:59)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.process.instance.ProcessRuntimeImpl.getProcessInstance(ProcessRuntimeImpl.java:190)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.getProcessInstance(AbstractWorkingMemory.java:1113)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.impl.StatefulKnowledgeSessionImpl.getProcessInstance(StatefulKnowledgeSessionImpl.java:283)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.persistence.processinstance.JPASignalManager.signalEvent(JPASignalManager.java:24)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.process.instance.ProcessRuntimeImpl$3.afterRuleFlowGroupDeactivated(ProcessRuntimeImpl.java:335)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.event.AgendaEventSupport.fireAfterRuleFlowGroupDeactivated(AgendaEventSupport.java:168)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.RuleFlowGroupImpl.setActive(RuleFlowGroupImpl.java:148)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.RuleFlowGroupImpl$DeactivateCallback.execute(RuleFlowGroupImpl.java:301)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.executeQueuedActions(AbstractWorkingMemory.java:994)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.DefaultAgenda.fireUntilHalt(DefaultAgenda.java:1037)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.fireUntilHalt(AbstractWorkingMemory.java:777)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.fireUntilHalt(AbstractWorkingMemory.java:753)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.command.runtime.rule.FireUntilHaltCommand$1.run(FireUntilHaltCommand.java:50)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at java.lang.Thread.run(Unknown Source)
Exception in thread <font color="red">"Thread-6"</font> org.drools.RuntimeDroolsException: Unexpected exception executing action org.drools.common.RuleFlowGroupImpl$DeactivateCallback@556949
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.executeQueuedActions(AbstractWorkingMemory.java:996)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.DefaultAgenda.fireUntilHalt(DefaultAgenda.java:1037)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.fireUntilHalt(AbstractWorkingMemory.java:777)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.fireUntilHalt(AbstractWorkingMemory.java:753)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.command.runtime.rule.FireUntilHaltCommand$1.run(FireUntilHaltCommand.java:50)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot release connection
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:202)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.persistence.JpaProcessPersistenceContext.findProcessInstanceInfo(JpaProcessPersistenceContext.java:26)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.persistence.processinstance.JPAProcessInstanceManager.getProcessInstance(JPAProcessInstanceManager.java:59)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.process.instance.ProcessRuntimeImpl.getProcessInstance(ProcessRuntimeImpl.java:190)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.getProcessInstance(AbstractWorkingMemory.java:1113)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.impl.StatefulKnowledgeSessionImpl.getProcessInstance(StatefulKnowledgeSessionImpl.java:283)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.persistence.processinstance.JPASignalManager.signalEvent(JPASignalManager.java:24)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.jbpm.process.instance.ProcessRuntimeImpl$3.afterRuleFlowGroupDeactivated(ProcessRuntimeImpl.java:335)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.event.AgendaEventSupport.fireAfterRuleFlowGroupDeactivated(AgendaEventSupport.java:168)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.RuleFlowGroupImpl.setActive(RuleFlowGroupImpl.java:148)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.RuleFlowGroupImpl$DeactivateCallback.execute(RuleFlowGroupImpl.java:301)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.drools.common.AbstractWorkingMemory.executeQueuedActions(AbstractWorkingMemory.java:994)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;... 5 more
Hibernate: select processins0_.InstanceId as InstanceId1_0_, processins0_.lastModificationDate as lastModi2_1_0_, processins0_.lastReadDate as lastRead3_1_0_, processins0_.processId as processId1_0_, processins0_.processInstanceByteArray as processI5_1_0_, processins0_.startDate as startDate1_0_, processins0_.state as state1_0_, processins0_.OPTLOCK as OPTLOCK1_0_ from ProcessInstanceInfo processins0_ where processins0_.InstanceId=?
Caused by: org.hibernate.exception.GenericJDBCException: Cannot release connection
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:478)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:429)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.jdbc.ConnectionManager.afterStatement(ConnectionManager.java:304)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:572)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:291)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:307)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:234)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.loader.Loader.doQuery(Loader.java:749)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.loader.Loader.loadEntity(Loader.java:1881)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.impl.SessionImpl.get(SessionImpl.java:842)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.impl.SessionImpl.get(SessionImpl.java:835)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:182)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;... 16 more
Caused by: java.sql.SQLException: error requeueing a JdbcPooledConnection from datasource jdbc/testDS in state ACCESSIBLE wrapping xads1: url=jdbc:h2:mem:mydb user=root
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at bitronix.tm.resource.jdbc.JdbcPooledConnection.release(JdbcPooledConnection.java:148)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at bitronix.tm.resource.jdbc.JdbcConnectionHandle.close(JdbcConnectionHandle.java:77)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:97)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:474)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;... 37 more
Caused by: bitronix.tm.internal.BitronixSystemException: cannot close a resource when its XAResource is taking part in an unfinished global transaction
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at bitronix.tm.resource.common.TransactionContextHelper.requeue(TransactionContextHelper.java:117)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;at bitronix.tm.resource.jdbc.JdbcPooledConnection.release(JdbcPooledConnection.java:146)
&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;... 40 more
&#160;
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Please suggest me can we use fireUntilHalt() with customhumantask handler. Why it always beahave differently?</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/626196#626196">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>