<?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 Externalizing Transaction Management for Activiti in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164290#M118038</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;Is there a way to tell Activiti to use an external transaction manager for managing transactions within a bean? I've gone through the documentation and other posts on this forum and it seems like if we mark our UserBean with @Transactional (Spring annotation) and set transactionsExternallyManaged to true, we can let activiti know that the transactions are being managed externally.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The app that I'm working on doesn't use Spring, but guice-persist to manage transactions at http session level. Is there a way for activiti (5.14) to know about that? &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-java line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;@com.google.inject.persist.Transactional(rollbackOn = Exception.class)&lt;BR /&gt;public void doStuff()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; service1.method1();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workflowSvc.someMethod();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Activiti processing - call to one of the services in activiti&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; service1.method2();&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If service1.method2() throws an Exception, changes to Activiti tables should be rolledback also (since its wrapped within a transaction) that is managed by guice-persist.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;One way we can think of is to extend from what SpringProcessEngineConfiguration is doing to let Activiti know that we're using an external transactionManager and implement our own process engine configuration class which defines the transactionManager in properties. Thoughts?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 25 Mar 2014 14:58:26 GMT</pubDate>
    <dc:creator>aseem</dc:creator>
    <dc:date>2014-03-25T14:58:26Z</dc:date>
    <item>
      <title>Externalizing Transaction Management for Activiti</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164290#M118038</link>
      <description>Hi,Is there a way to tell Activiti to use an external transaction manager for managing transactions within a bean? I've gone through the documentation and other posts on this forum and it seems like if we mark our UserBean with @Transactional (Spring annotation) and set transactionsExternallyManaged</description>
      <pubDate>Tue, 25 Mar 2014 14:58:26 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164290#M118038</guid>
      <dc:creator>aseem</dc:creator>
      <dc:date>2014-03-25T14:58:26Z</dc:date>
    </item>
    <item>
      <title>Re: Externalizing Transaction Management for Activiti</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164291#M118039</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;That is indeed the way to do it: create a custom config and let you be inspired by the the SpringEngineConfiguration.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The bulk of the work will probably be the interceptor responsible for starting/committing the transaction.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 01 Apr 2014 17:40:15 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164291#M118039</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-04-01T17:40:15Z</dc:date>
    </item>
    <item>
      <title>Re: Externalizing Transaction Management for Activiti</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164292#M118040</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks Joram, will try to implement and let you know how it goes. Alternatively, will let you know in case I get stuck &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://connect.hyland.com/i/smilies/16x16_smiley-wink.png" alt="Smiley Wink" title="Smiley Wink" /&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 01 Apr 2014 21:30:47 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164292#M118040</guid>
      <dc:creator>aseem</dc:creator>
      <dc:date>2014-04-01T21:30:47Z</dc:date>
    </item>
    <item>
      <title>Re: Externalizing Transaction Management for Activiti</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164293#M118041</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I was successful in doing this (which was a while ago) and sharing the solution in case someone else runs into this kind of a problem. Its a bit late, especially since 5.16 was released which handles this in a very graceful manner.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Had to create a CustomProcessEngineConfiguration class that extends ProcessEngineConfigurationImpl and overrides createTransactionInterceptor() and buildProcessEngine() methods.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;@Singleton&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public class CustomProcessEngineConfiguration extends ProcessEngineConfigurationImpl&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected CommandInterceptor createTransactionInterceptor()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new TransactionInterceptor(this.getDataSource());&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ProcessEngine buildProcessEngine()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return super.buildProcessEngine();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The TransactionInterceptor class extends AbstractCommandInterceptor (for 'next' variable to execute the transaction chain) and implements org.aopalliance.intercept.MethodInterceptor. The overridden invoke(MethodInvocation invocation) method is what manages the starting and committing of transactions or rolling back in case of failure. In my case, it was as easy as looking at methods which have @com.google.inject.persist.Transactional annotation on them and wrapping them up in one transaction in the invoke() method.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;On definition side, setting transactionsExternallyManaged to true in activiti.cfg.xml and creating process engine as:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;java&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ProcessEngine processEngine = CustomProcessEngineConfiguration&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; .createProcessEngineConfigurationFromResource("activiti.cfg.xml")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; .setDataSource(dataSource)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; .buildProcessEngine();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/java&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;did the trick.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Oct 2014 18:00:47 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164293#M118041</guid>
      <dc:creator>aseem</dc:creator>
      <dc:date>2014-10-28T18:00:47Z</dc:date>
    </item>
    <item>
      <title>Re: Externalizing Transaction Management for Activiti</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164294#M118042</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for posting back, even after this time &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>Fri, 31 Oct 2014 15:13:44 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/externalizing-transaction-management-for-activiti/m-p/164294#M118042</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-10-31T15:13:44Z</dc:date>
    </item>
  </channel>
</rss>

