<!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">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 4.3 + Spring 2.5 + Hibernate: Illegal attempt to associate a collection with two open sessions
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/manu3989">Maninder Singh</a> in <i>jBPM</i> - <a href="http://community.jboss.org/message/546420#546420">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hi</p><p>I am trying to integrate BPM 4.3 with our existing application. And I would want the same session factory and the transaction manager to be used by JBPM. For this we have followed the steps mentioned in the Spring integration section in the JBPM docs. My jbpm.cfg.xml looks like this</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&lt;jbpm-configuration spring="enabled"&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160; &lt;import resource="jbpm.default.cfg.xml" /&gt;</p><p>&#160; &lt;import resource="jbpm.businesscalendar.cfg.xml" /&gt;</p><p>&#160; &lt;!-- &lt;import resource="jbpm.tx.hibernate.cfg.xml" /&gt; --&gt;</p><p>&#160; &lt;import resource="jbpm.jpdl.cfg.xml" /&gt;</p><p>&#160; &lt;import resource="jbpm.identity.cfg.xml" /&gt;</p><p>&#160; &lt;import resource="jbpm.tx.spring.cfg.xml" /&gt;</p><p>&lt;/jbpm-configuration&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>And my jbpm.tx.spring.cfg.xml looks like this. Please note we have added the transaction-manager attribute. I am not sure if we need to add</p><p>"&lt;transaction type="spring" /&gt;" . Although the documentation says it should be removed.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&lt;process-engine-context&gt;</p><p>&#160;&#160;&#160; &lt;command-service name="newTxRequiredCommandService"&gt;</p><p>&#160;&#160;&#160;&#160;&#160; &lt;retry-interceptor /&gt;</p><p>&#160;&#160;&#160;&#160;&#160; &lt;environment-interceptor policy="requiresNew" /&gt;</p><p>&#160;&#160;&#160;&#160;&#160; &lt;spring-transaction-interceptor policy="requiresNew" transaction-manager="JtaTransactionManager" /&gt;</p><p>&#160;&#160;&#160; &lt;/command-service&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160; &lt;!-- Default command service has a Spring transaction interceptor--&gt;</p><p>&#160;&#160;&#160; &lt;command-service name="txRequiredCommandService"&gt;</p><p>&#160;&#160;&#160;&#160;&#160; &lt;retry-interceptor /&gt;</p><p>&#160;&#160;&#160;&#160;&#160; &lt;environment-interceptor /&gt;</p><p>&#160;&#160;&#160;&#160;&#160; &lt;spring-transaction-interceptor&#160; transaction-manager="JtaTransactionManager" /&gt;</p><p>&#160;&#160;&#160; &lt;/command-service&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160; &lt;/process-engine-context&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160; &lt;transaction-context&gt;</p><p>&#160;&#160; &lt;transaction type="spring" /&gt;</p><p>&#160;&#160;&#160; &lt;hibernate-session current="true" /&gt;</p><p>&#160; &lt;/transaction-context&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&lt;/jbpm-configuration&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>My applicationContext has the following entries...</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&lt;bean id="JtaTransactionManager" depends-on="userTransactionService"&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="transactionManager" ref="AtomikosTransactionManager" /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="userTransaction" ref="AtomikosUserTransaction" /&gt;<br/>&#160;&#160;&#160; &lt;/bean&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&lt;bean id="sessionFactory"&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="dataSource" ref="atomikosDataSource" /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="mappingLocations" ref="mappingLocations" /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="hibernateProperties" ref="hibernateProperties" /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;!--&lt;property name="jtaTransactionManager" ref="AtomikosTransactionManager" /&gt;--&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="entityInterceptor" ref="auditInterceptor" /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="lobHandler" ref="lobHandler" /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;!-- &lt;property name="mappingResources"&gt;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;list&gt;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;value&gt;jbpm.repository.hbm.xml&lt;/value&gt;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;value&gt;jbpm.execution.hbm.xml&lt;/value&gt;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;value&gt;jbpm.history.hbm.xml&lt;/value&gt;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;value&gt;jbpm.task.hbm.xml&lt;/value&gt;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;value&gt;jbpm.identity.hbm.xml&lt;/value&gt;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/list&gt;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/property&gt;--&gt;&#160; <br/>&#160;&#160;&#160; &lt;/bean&gt;<br/>&#160;&#160;&#160; <br/>&#160;&#160;&#160; &lt;bean id="springHelper" &gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="jbpmCfg" value="jbpm.ice.cfg.xml"&gt;&lt;/property&gt;<br/>&#160;&#160;&#160; &lt;/bean&gt;&#160; <br/>&#160;&#160;&#160; <br/>&#160;&#160;&#160; &lt;bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine"&#160; /&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>---------------------------------------------------------------------------------</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The problem I am getting now is when I run the junit tests. I can see that there are two sessions being created in the database using the same TransactionManager. The exception i get is</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Caused by: org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions<br/>&#160;&#160;&#160; at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:432)<br/>&#160;&#160;&#160; at org.hibernate.event.def.WrapVisitor.processCollection(WrapVisitor.java:67)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:124)<br/>&#160;&#160;&#160; at org.hibernate.event.def.WrapVisitor.processValue(WrapVisitor.java:121)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:78)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractSaveEventListener.visitCollectionsBeforeSave(AbstractSaveEventListener.java:394)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:296)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)<br/>&#160;&#160;&#160; at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)<br/>&#160;&#160;&#160; at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)<br/>&#160;&#160;&#160; at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)<br/>&#160;&#160;&#160; at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:292)<br/>&#160;&#160;&#160; at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:240)<br/>&#160;&#160;&#160; at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)<br/>&#160;&#160;&#160; at org.hibernate.engine.Cascade.cascade(Cascade.java:154)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:454)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)<br/>&#160;&#160;&#160; at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)<br/>&#160;&#160;&#160; at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)<br/>&#160;&#160;&#160; at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)<br/>&#160;&#160;&#160; at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)<br/>&#160;&#160;&#160; at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)<br/>&#160;&#160;&#160; at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:697)<br/>&#160;&#160;&#160; at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)<br/>&#160;&#160;&#160; ... 103 more</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Any ideas why this might be happening? I am guessing JBPM is creating its own session when it trys to manipulate the domain objects of my application.</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/546420#546420">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>