<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">Hi all, please can you help me with this, its driving me crazy! <div><br></div><div>I&#39;m experiencing the following exception: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)</div>
<div><br></div><div>It seems this exception is being thrown on the completion of the &#39;getNextJobForDevice&#39; method outlined below. From what I can tell it seems that the when the implicit transaction for the &#39;jobFacadeLocal.print(job, device)&#39; device is committed, we can no longer use any entities that were updated in this transaction. (I&#39;m using container managed transactions)</div>
<div><br></div><div>I&#39;ve tried to refresh the object from the database after this transaction. I&#39;ve tried using the entityManager.refresh() mehtod to do this, but it seems to return the entity without any changes committed from the &#39;jobFacadeLocal.print(job, device)&#39; method. I don&#39;t quite understand this since I&#39;m expecting the changes to have committed as this stage. I&#39;ve also tried the ((Session)entityManager.getDelegate()).refresh(t); approach and still no luck!</div>
<div><br></div><div><div>I&#39;d greatly appreciate some help on this since I&#39;ve been trying to find a solution for a while now with not luck. Even a link to point me in the right direction would be greatly appreciated at this time.</div>
<div><br></div><div>Thank you for your time in advance.</div><div><br></div><div>Regards</div><div>Drayton</div><div><br></div><div><div>@Stateless</div><div>@WebService</div><div>public class Spooler implements SpoolerLocal {</div>
<div><br></div></div><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>...</div><div><br></div><div>public Job getNextJobForDevice(String deviceName) throws SpoolerException {</div><div><br></div></div></blockquote><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>...</div><div><br></div><div><div>List&lt;Job&gt; jobs = jobFacadeLocal.findPendingByStockTypes(device.getStockTypes());</div><div><br></div><div>for (Job job : jobs) {</div></div></div></blockquote></blockquote>
</div></span><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div><div><br></div></div></div><div>...</div><div><br></div></blockquote></blockquote></div></span></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>jobFacadeLocal.print(job, device);</div></div></blockquote></div></span></blockquote></blockquote><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div><br></div></div></blockquote></div></span><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>//The changes made in the &#39;jobFacadeLocal.print(job, device)&#39; are visible, but the entity version number has not changed (even though it has been updated in the db)</div><div><br></div><div>// I have tried refreshing the job entity here, but the refresh returns a job entity as it was before the &#39;jobFacadeLocal.print(job, device)&#39; (still with the old version number).</div>
</div></blockquote></div></span></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>// As I intend to use the updated values of the &#39;job&#39; entity here, this will not do.</div><div><br></div><div>//The code here should only execute if the transaction above has not been rolled back. (Thus the REQUIRES_NEW annotation on the method)</div>
</div><div><br></div><div>...</div></blockquote></div></span></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div style="text-align: left;"><br></div></div></blockquote></div></span></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div style="text-align: left;">return job;</div></div></blockquote>}</div><div><br></div><div>...</div></span></blockquote></blockquote><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div>
}<br><div><br></div><div><br></div><div><div>@Stateless</div><div>public class JobFacade extends Base&lt;Job&gt; implements JobFacadeLocal {</div><div><br></div></div><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>...</div><div><div>@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)</div><div>public void print(Job job, Device device) throws BankException, LocationException, JobException, StateException  {</div><div>
<br></div></div></div></blockquote><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div><div>...</div><div><br></div><div>jobFacadeLocal.update(job); //This just passes the &#39;job&#39; entity to entityManager.merge(job);</div><div><br></div><div>...</div></div></div></blockquote></blockquote><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div><div>}</div></div></div></blockquote><div><div>}</div></div></div><div><br></div><div><br></div></span>