<?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 Events occuring before DB updates in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/events-occuring-before-db-updates/m-p/155124#M109501</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;I am using a simple workflow with 2 tasks as shown in following image. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;A href="http://img182.imagevenue.com/img.php?image=565699128_A001CustomerRegistration_122_438lo.jpg" rel="nofollow noopener noreferrer"&gt;[IMG]http://img182.imagevenue.com/loc438/th_565699128_A001CustomerRegistration_122_438lo.jpg[/IMG]&lt;/A&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;User Task has Start and end End task listener as shown:&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;@Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void notify(DelegateTask task) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println("Event Received : " + task.getEventName());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;String&amp;gt; approvers = new ArrayList&amp;lt;String&amp;gt;();&lt;BR /&gt;&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;Set&amp;lt;IdentityLink&amp;gt; identities =&amp;nbsp; task.getCandidates();&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (IdentityLink identity :identities){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;approvers.add(identity.getUserId());&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;Object&amp;gt; loggedinUsers = sessionRegistry.getAllPrincipals();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;for (Object loggedinUser : loggedinUsers) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (loggedinUser instanceof MyUserDetails) {&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;MyUserDetails myUser = (MyUserDetails) loggedinUser;&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;if (approvers.contains(myUser.getUsername())) {&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;&amp;nbsp;System.out.println("Send refresh to :" + myUser.getUsername());&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Notification Logic…..&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;&amp;nbsp;}&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;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;BR /&gt;&lt;SPAN&gt;User task is assigned to multiple users say M1, M2.&amp;nbsp; When workflow starts "start" event which is associated with first task is triggered. this will send "Refresh" notification to all associated actors of this task. after getting notification each actor will update task list by calling&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-java line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;allTasks = taskService.createTaskQuery().taskCandidateUser(userId).list();&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;BR /&gt;&lt;SPAN&gt;Problem statement:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Step 1: When new workflow starts, START event is fired, captured by listener and refresh notification is send to all actors of task. Till this point everything is working as expected.&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color:#FF0000;"&gt;But when actors are updating task list, as Activiti engine has not added DB entries of new user task, taskCandidateUser.list() is not returning any results.&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Step 2: When user completes his task, END event is fired, captured by listener and refresh notification is send to all actors of task. Till this point everything is working as expected.&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color:#FF0000;"&gt;But when actors are updating task list, as Activiti engine has not removed DB entries for completed task, taskCandidateUser.list() is returning task added in step 1. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please note if I manually refresh screen after step 1 or 2, task list displays updated contents.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there anyway to fire events only after complete DB update.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Shirish&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 30 Sep 2013 19:00:29 GMT</pubDate>
    <dc:creator>bathe</dc:creator>
    <dc:date>2013-09-30T19:00:29Z</dc:date>
    <item>
      <title>Events occuring before DB updates</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/events-occuring-before-db-updates/m-p/155124#M109501</link>
      <description>Hi,I am using a simple workflow with 2 tasks as shown in following image. &amp;nbsp; [IMG]http://img182.imagevenue.com/loc438/th_565699128_A001CustomerRegistration_122_438lo.jpg[/IMG] &amp;nbsp;&amp;nbsp; User Task has Start and end End task listener as shown:&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&amp;nbsp;&amp;nbsp;&amp;nbsp;public void notify(DelegateTask task) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.</description>
      <pubDate>Mon, 30 Sep 2013 19:00:29 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/events-occuring-before-db-updates/m-p/155124#M109501</guid>
      <dc:creator>bathe</dc:creator>
      <dc:date>2013-09-30T19:00:29Z</dc:date>
    </item>
    <item>
      <title>Re: Events occuring before DB updates</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/events-occuring-before-db-updates/m-p/155125#M109502</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;You can hook in a TransactionSynchornisationAdapter (if you're using spring) to make sure your queued events (created in the listener) are flushed at this moment. if the transaction rolls back, you can ignore the events and not throw them. You'll have to dig quite deep to see where we add out synhronisation adapter.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Another option is to store the events you want to fire as a variable (or in your won DB) and have a async-service-task after the usertaks (eg. in the process managers approval, or another one) doing the "sending" of the notifications. Making it async makes sure the previous part of the process (usertask) is comitted successfully before the sending is executed.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Oct 2013 09:45:48 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/events-occuring-before-db-updates/m-p/155125#M109502</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2013-10-02T09:45:48Z</dc:date>
    </item>
    <item>
      <title>Re: Events occuring before DB updates</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/events-occuring-before-db-updates/m-p/155126#M109503</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;Thanks for really good solution.&amp;nbsp; As I am using Spring, I have implemented TransactionSynchornisationAdapter and it worked as expected.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again,&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Oct 2013 12:45:23 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/events-occuring-before-db-updates/m-p/155126#M109503</guid>
      <dc:creator>bathe</dc:creator>
      <dc:date>2013-10-03T12:45:23Z</dc:date>
    </item>
  </channel>
</rss>

