<?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 Why commit in transaction don't do this until the webscript is finished? in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285516#M238646</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm implementing a java backed webscript. In my description doc the transaction is specified like required.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;lt;transaction&amp;gt;required&amp;lt;/transaction&amp;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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;UserTransaction trx = serviceRegistry.getTransactionService().getUserTransaction(false);&lt;BR /&gt;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.begin();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.commit();&lt;BR /&gt;} catch(Throwable e) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.rollback();&lt;BR /&gt;&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And after, in other part of the code, I have something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;UserTransaction trx = serviceRegistry.getTransactionService().getUserTransaction(false);&lt;BR /&gt;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.begin();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 3&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 4&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.commit();&lt;BR /&gt;} catch(Throwable e) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.rollback();&lt;BR /&gt;&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If the OPERATION 4 not works, I want to have a rollback only of the operations 3 and 4. And the operation 1 and 2 commit ok. Is the reason I have different transactions.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But the webscript don't do this. When the operation 4 fails (I induce a exception there to test it), the webscript do the rollback of all: 1, 2, 3 and 4. I don't understand why, if I do the commit after operation 2.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This trx.commit is parcial? The real commit is doing when the webscript ends? Somebody knows the reason, please?&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;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 11 Jul 2014 11:37:36 GMT</pubDate>
    <dc:creator>spilby</dc:creator>
    <dc:date>2014-07-11T11:37:36Z</dc:date>
    <item>
      <title>Why commit in transaction don't do this until the webscript is finished?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285516#M238646</link>
      <description>I'm implementing a java backed webscript. In my description doc the transaction is specified like required.&amp;lt;transaction&amp;gt;required&amp;lt;/transaction&amp;gt;‍‍‍I have something like this:UserTransaction trx = serviceRegistry.getTransactionService().getUserTransaction(false);try {&amp;nbsp;&amp;nbsp; trx.begin();&amp;nbsp;&amp;nbsp; Alfre</description>
      <pubDate>Fri, 11 Jul 2014 11:37:36 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285516#M238646</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-07-11T11:37:36Z</dc:date>
    </item>
    <item>
      <title>Re: Why commit in transaction don't do this until the webscript is finished?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285517#M238647</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;It is because you are using &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt; &lt;BR /&gt;UserTransaction trx = serviceRegistry.getTransactionService().getUserTransaction(false); &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt; ,It will use existing transaction(your webscript transaction ) instead of creating new one .&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;You can try following code&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;UserTransaction trx = serviceRegistry.getTransactionService().getNonPropagatingUserTransaction(false);&lt;BR /&gt;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.begin();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.commit();&lt;BR /&gt;} catch(Throwable e) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.rollback();&lt;BR /&gt;&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;UserTransaction trx = serviceRegistry.getTransactionService().getNonPropagatingUserTransaction(false);&lt;BR /&gt;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.begin();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 3&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 4&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.commit();&lt;BR /&gt;} catch(Throwable e) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; trx.rollback();&lt;BR /&gt;&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;And make sure not throw exception in these two code sections(because you set required in your webscript transaction definition) .&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Jul 2014 15:51:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285517#M238647</guid>
      <dc:creator>kaynezhang</dc:creator>
      <dc:date>2014-07-11T15:51:00Z</dc:date>
    </item>
    <item>
      <title>Re: Why commit in transaction don't do this until the webscript is finished?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285518#M238648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Oks, if I understand all ok, transaction required gives me a unique transaction for my webscript. If I change it to transaction none, the transaction do the commit every time I call a commit() method, and the rollbacks the same. And the code works like I need. It's all right?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then, if I use transaction required, and the same transaction with getUserTransaction false, the commit method not works? I thank that simply the commit works on the same transaction. Sorry with the confusion, I dont understand the difference, it's my fault.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;One question more about this… Why throwing an exception isn't a good practice if I use transaction required? What problem could give me? &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The other solution is change to nonPropagationUserTransaction method. First I used this method, but gives me a problem. I have a cluster of two running Alfresco. If I do on the same folder an operation on one node and then do another operation on the other it gives me a transaction concurrency problem. We think that the problem was that the second one try to obtain the transaction of the first, and our alfresco couldn't transfer the transaction in the cluster. When I change to getUserTransaction false, all works ok. Is the reason that I prefer the solution changing only the transaction required in the xml.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jul 2014 05:45:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285518#M238648</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-07-14T05:45:00Z</dc:date>
    </item>
    <item>
      <title>Re: Why commit in transaction don't do this until the webscript is finished?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285519#M238649</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BR /&gt;&lt;SPAN&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;If you set transaction required for your webscript,webscript framework will create a transaction for you ,in this situation&amp;nbsp; &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt; getUserTransaction &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt; getNonPropagatingUserTransaction &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt; will work differently:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;a)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;getUserTransaction&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt; will use the existiong transaction that webscript framework created ,so all your code in &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&amp;nbsp; Alfresco OPERATION 1,Alfresco OPERATION 2,Alfresco OPERATION 3, Alfresco OPERATION 4 &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;all execute in the same transaction ,any exceptions throwed in&amp;nbsp; Alfresco OPERATION 1 to Alfresco OPERATION 4 will cause the whole transaction rollback.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;b)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;getNonPropagatingUserTransaction&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;&amp;nbsp; will create a new transaction , &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;Alfresco OPERATION 1 and&amp;nbsp; Alfresco OPERATION 2 &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;will execute in a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; second transaction that is different from webscript transaction which can be commited and rollback separately, &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;Alfresco OPERATION 3 and&amp;nbsp; Alfresco&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; OPERATION 4 &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;will run in the third transaction&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;If you set transaction none for your webscript,then &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt; getUserTransaction &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt; getNonPropagatingUserTransaction &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt; will work the same ,both will create a new transaction for their own.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;No,I did not mean throwing an exception isn't a good practice ,it depends on your requirment .If you use transaction required and&amp;nbsp; throw an exception for example in&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Alfresco OPERATION 2&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;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt; ,it will also cause your webscript transaction rollback,which might be not what you need.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jul 2014 13:46:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285519#M238649</guid>
      <dc:creator>kaynezhang</dc:creator>
      <dc:date>2014-07-14T13:46:00Z</dc:date>
    </item>
    <item>
      <title>Re: Why commit in transaction don't do this until the webscript is finished?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285520#M238650</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks kaynezhang! Your post has been very useful. Now I undestand the differences perfectly. Thanks again! &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jul 2014 05:55:05 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/why-commit-in-transaction-don-t-do-this-until-the-webscript-is/m-p/285520#M238650</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-07-23T05:55:05Z</dc:date>
    </item>
  </channel>
</rss>

