<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic ActivitiOptimisticLockingException Retry in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202306#M155436</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;sometimes ActivitiOptimisticLockingException's like &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;VariableInstanceEntity[id=99, name=nrOfCompletedInstances, type=integer, longValue=1, textValue=1] was updated by another transaction concurrently&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;occur and the hole process is stalled until the job ist executed again. Reducing lockTimeInMillis isn't an option, so is it safe to extend the ExecuteJobsRunnable class to allow an immediate second attempt ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&lt;BR /&gt;final List&amp;lt;String&amp;gt; failedJobs = new ArrayList&amp;lt;String&amp;gt;();&lt;BR /&gt;…&lt;BR /&gt;while (!currentProcessorJobQueue.isEmpty()) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;String job = currentProcessorJobQueue.remove(0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; commandExecutor.execute(new ExecuteJobsCmd(job));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch( ActivitiOptimisticLockingException ex)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;if( ! failedJobs.contains(job)){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!currentProcessorJobQueue.isEmpty()) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentProcessorJobQueue.add(0, job);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentProcessorJobQueue.add(job);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.info("ActivitiOptimisticLockingException job:" +job+ ", retry");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;failedJobs.add(job);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Throwable e) {&lt;BR /&gt;…&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;kai&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 27 Aug 2014 00:42:25 GMT</pubDate>
    <dc:creator>thane</dc:creator>
    <dc:date>2014-08-27T00:42:25Z</dc:date>
    <item>
      <title>ActivitiOptimisticLockingException Retry</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202306#M155436</link>
      <description>Hi,sometimes ActivitiOptimisticLockingException's like VariableInstanceEntity[id=99, name=nrOfCompletedInstances, type=integer, longValue=1, textValue=1] was updated by another transaction concurrently‍‍‍occur and the hole process is stalled until the job ist executed again. Reducing lockTimeInMilli</description>
      <pubDate>Wed, 27 Aug 2014 00:42:25 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202306#M155436</guid>
      <dc:creator>thane</dc:creator>
      <dc:date>2014-08-27T00:42:25Z</dc:date>
    </item>
    <item>
      <title>Re: ActivitiOptimisticLockingException Retry</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202307#M155437</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Are you running multiple nodes? Or are different threads/users are accessing the same process?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If so - the exception is expected when the same variable is updated by two threads - one shall be rollbacked, the other wins. So it is safe to retry the failing one (but it will now change the variable value to that particular value)&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Aug 2014 17:56:46 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202307#M155437</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-08-30T17:56:46Z</dc:date>
    </item>
    <item>
      <title>Re: ActivitiOptimisticLockingException Retry</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202308#M155438</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;indeed the exception is not suprising. I'm just wondering about the behaviour after the exception occured.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[img]&lt;/SPAN&gt;&lt;A href="http://s7.directupload.net/images/140831/2tfu36ha.png" rel="nofollow noopener noreferrer"&gt;http://s7.directupload.net/images/140831/2tfu36ha.png&lt;/A&gt;&lt;SPAN&gt;[/img]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Two users A,B complete their User Task concurrently. One transaction looses and we get something like:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;org.activiti.engine.ActivitiOptimisticLockingException: VariableInstanceEntity[id=12513, name=nrOfCompletedInstances,…&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Let's say user A won, the job (execute the Service Task and end instance), triggered by user B, remains in the database until LOCK_EXP_TIME_ is reached and is executed again afterwards. So the hole process could be stalled for lockTimeInMillis (^= 5 minutes), which is not necessary in this context. (single node, multiple users)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ciao,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;kai&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Aug 2014 23:47:12 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202308#M155438</guid>
      <dc:creator>thane</dc:creator>
      <dc:date>2014-08-30T23:47:12Z</dc:date>
    </item>
    <item>
      <title>Re: ActivitiOptimisticLockingException Retry</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202309#M155439</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Indeed - in such a setup it is indeed not helpful.&amp;nbsp; However, this case is different because it's a user task, there is no job involved. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In this case, you could catch the exception and retry yourself, without delay.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Sep 2014 09:39:31 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/activitioptimisticlockingexception-retry/m-p/202309#M155439</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-09-15T09:39:31Z</dc:date>
    </item>
  </channel>
</rss>

