<?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 TransactionManagement and async=true  in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155385#M109728</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;we are very puzzled about the transactions in Activiti. While testing we got other results than the documentation suggested when we use activiti:async="true". &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;By the documentation i understand that every time activiti:async="true" is configured the actual transaction is committed and a new one is created by the jobExecutor, right? That is true if you have two ServiceTask configured. In my test project i faced the following limitation to this behaviour. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1.) activiti:async="true" for a SubProcess is does not lead to a new transaction&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.) If you have more than one ServiceTask with activiti:async="true" in a row this only applies to the first activiti:async="true" configured. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Am I missing something? I hope you can help me on this. I faced the same issue in Version 5.12 and 5.14.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My config does look as follows: &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-java line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Bean&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SpringProcessEngineConfiguration processEngineConfiguration() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final SpringProcessEngineConfiguration engineConfiguration = new SpringProcessEngineConfiguration();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final DataSource dataSource = activitiDataSource();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; engineConfiguration.setDataSource(dataSource);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; engineConfiguration.setTransactionManager(transactionManager);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; engineConfiguration.setDatabaseSchemaUpdate("drop-create");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; engineConfiguration.setJobExecutorActivate(true);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return engineConfiguration;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;where the transaction manager is used for Activiti and my application db.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When needed I can provide a test project to verify my result. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any help will be appreciate! thanks in advance, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Rene&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 13 Feb 2014 14:17:05 GMT</pubDate>
    <dc:creator>rene</dc:creator>
    <dc:date>2014-02-13T14:17:05Z</dc:date>
    <item>
      <title>TransactionManagement and async=true</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155385#M109728</link>
      <description>HI, we are very puzzled about the transactions in Activiti. While testing we got other results than the documentation suggested when we use activiti:async="true". By the documentation i understand that every time activiti:async="true" is configured the actual transaction is committed and a new one i</description>
      <pubDate>Thu, 13 Feb 2014 14:17:05 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155385#M109728</guid>
      <dc:creator>rene</dc:creator>
      <dc:date>2014-02-13T14:17:05Z</dc:date>
    </item>
    <item>
      <title>Re: TransactionManagement and async=true</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155386#M109729</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Rene.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Could you attach jUnit test (or project) please?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Martin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 Feb 2014 07:51:47 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155386#M109729</guid>
      <dc:creator>martin_grofcik</dc:creator>
      <dc:date>2014-02-14T07:51:47Z</dc:date>
    </item>
    <item>
      <title>Re: TransactionManagement and async=true</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155387#M109730</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Martin, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thanks for you reply, I have created a simple project thats demonstrates the second "async" in a row issue. I hope you can help us with this issue.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you have any questions about the project, let me know. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks a lot, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Rene&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PS: since i can attach only txt files, i added the extension to txt. &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt; &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 17 Feb 2014 18:39:27 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155387#M109730</guid>
      <dc:creator>rene</dc:creator>
      <dc:date>2014-02-17T18:39:27Z</dc:date>
    </item>
    <item>
      <title>Re: TransactionManagement and async=true</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155388#M109731</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Rene,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you for very clearly defined problem. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I had a look on the &lt;/SPAN&gt;&lt;CODE&gt;de.wps.activiti.process.TransactionExceptionThrowingProcessTest2Async#transactionManagementTest&lt;/CODE&gt;&lt;SPAN&gt; test.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I found that there is no wait to finish asynchronous tasks. I changed test little bit.&lt;/SPAN&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt; @Test&lt;BR /&gt; @Deployment(resources = { PROCESS_BPMN })&lt;BR /&gt; public void transactionManagementTest() throws Exception {&lt;BR /&gt;&amp;nbsp; try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; runtimeService.startProcessInstanceByKey(PROCESS_KEY, key);&lt;BR /&gt;&amp;nbsp; } catch (Exception ex) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; LOGGER.error("#### Catched exception ####", ex);&lt;BR /&gt;&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;&amp;nbsp; TimeUnit.SECONDS.sleep(15);&lt;BR /&gt;&amp;nbsp; assertThat(countHistoricProcessesByBusinessKey(key), is(1L));&lt;BR /&gt;&amp;nbsp; List&amp;lt;Foo&amp;gt; findAll = fooRepository.findAll();&lt;BR /&gt;&amp;nbsp; assertThat(findAll, containsInAnyOrder(hasProperty("bar", is("FooBar1")), hasProperty("bar", is("FooBar2"))));&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; assertThat(findAll.size(), is(2));&lt;BR /&gt; }&lt;BR /&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE&gt;TimeUnit.SECONDS.sleep(15)&lt;/CODE&gt;&lt;SPAN&gt; waits for job executor to process all jobs. JobExecutor is invoked periodically, that's why we have to wait on it to be executed.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;There is 3 times retry set by default. That's why jobexecutor tries 3 times to execute &lt;/SPAN&gt;&lt;CODE&gt;changeDBValueTo3&lt;/CODE&gt;&lt;BR /&gt;&lt;SPAN&gt;Wait can be done in more elegant way - activiti tests use&lt;/SPAN&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp; public void waitForJobExecutorToProcessAllJobs(long maxMillisToWait, long intervalMillis) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; JobExecutor jobExecutor = processEngineConfiguration.getJobExecutor();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; jobExecutor.start();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Timer timer = new Timer();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InteruptTask task = new InteruptTask(Thread.currentThread());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timer.schedule(task, maxMillisToWait);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean areJobsAvailable = true;&lt;BR /&gt;&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; while (areJobsAvailable &amp;amp;&amp;amp; !task.isTimeLimitExceeded()) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.sleep(intervalMillis);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; areJobsAvailable = areJobsAvailable();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(Throwable t) {&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; // Ignore, possible that exception occurs due to locking/updating of table on MSSQL when&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; // isolation level doesn't allow READ of the table&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; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (InterruptedException e) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ignore&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } finally {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timer.cancel();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (areJobsAvailable) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ActivitiException("time limit of " + maxMillisToWait + " was exceeded");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } finally {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jobExecutor.shutdown();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;SPAN&gt;Please let me know whether it helps.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Martin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Feb 2014 07:39:33 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transactionmanagement-and-async-true/m-p/155388#M109731</guid>
      <dc:creator>martin_grofcik</dc:creator>
      <dc:date>2014-02-18T07:39:33Z</dc:date>
    </item>
  </channel>
</rss>

