<?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 Re: Transaction rolled back in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124629#M87693</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I am trying to track down the cause of the problem described in the original post. Does somebody have answer to the following questions?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Where exactly is Spring configured to mark a transaction for rollback on AlfrescoRuntimeException?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've tried&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;grep&amp;nbsp; AlfrescoRuntimeException `find HEAD -name '*xml'`&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;without success. Ã¢â‚¬â€œ Is it done via exception catching?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2. I've set a breakpoint on both AlfrescoRuntimeException and InvalidNodeRefException (caught and uncaught) and only the latter breaks for the code in the original post. Still, the transaction gets marked as rollback. Any idea why this could be? In what other way can a transaction be marked as rollback?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3. The strange thing is that after the code from the original post is run in a &lt;/SPAN&gt;&lt;STRONG&gt;a webapp running alongside the Web Client&lt;/STRONG&gt;&lt;SPAN&gt;, the Web Client itself has a transaction that is marked for rollback Ã¢â‚¬â€œ even though these are different threads! As a consequence, users cannot log in anymore without errors and see this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;An error occurred in one of the dashlets.&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Failed to get to do tasks: javax.transaction.RollbackException: The transaction has already been marked for rollback&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Failed to get pooled tasks: javax.transaction.RollbackException: The transaction has already been marked for rollback&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Failed to get all active tasks: javax.transaction.RollbackException: The transaction has already been marked for rollback&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it true that only the &lt;/SPAN&gt;&lt;STRONG&gt;current&lt;/STRONG&gt;&lt;SPAN&gt; transaction is marked for rollback and not all?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Kaspar&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 04 Feb 2008 09:28:09 GMT</pubDate>
    <dc:creator>hbf</dc:creator>
    <dc:date>2008-02-04T09:28:09Z</dc:date>
    <item>
      <title>Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124626#M87690</link>
      <description>Hi,I need some advice from a Spring transaction guru, it seems: I don't get the following to work&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserTransaction transaction = transactionService.getNonPropagatingUserTransaction();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transaction.begin();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationService.authenticate(LOGIN, PASSWORD.toCharArray());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;</description>
      <pubDate>Thu, 10 Jan 2008 11:45:46 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124626#M87690</guid>
      <dc:creator>hbf</dc:creator>
      <dc:date>2008-01-10T11:45:46Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124627#M87691</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;You are pretty much correct. Certain types of runtime exceptions - anything that extends AlfrescoRuntimeException in our case - has been configured to be caught by Spring and will cause the current exception to be marked as rollback. Basically if certain exceptions occur then you will have no choice but to start another transaction. However, InvalidNodeRefException is NOT derived from AlfrescoRuntimeException so i would not think this would cause the problem you are having…&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Kevin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 21 Jan 2008 17:59:48 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124627#M87691</guid>
      <dc:creator>kevinr</dc:creator>
      <dc:date>2008-01-21T17:59:48Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124628#M87692</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thank you very much, Kevin, I guess that will help me track this down further: I'll check what exact exception is thrown that caused the roll-back…&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the meantime: How does the Web Client react if its transaction is rolled back? I've made the experience that once this happens, it starts behaving strangely.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Could it be that the Web Client does not check for rolled back transactions and does not start a new transaction?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Which would mean that you have to take the system down and restart to be able to work again.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Kaspar&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 21 Jan 2008 19:12:20 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124628#M87692</guid>
      <dc:creator>hbf</dc:creator>
      <dc:date>2008-01-21T19:12:20Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124629#M87693</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I am trying to track down the cause of the problem described in the original post. Does somebody have answer to the following questions?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Where exactly is Spring configured to mark a transaction for rollback on AlfrescoRuntimeException?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've tried&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;grep&amp;nbsp; AlfrescoRuntimeException `find HEAD -name '*xml'`&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;without success. Ã¢â‚¬â€œ Is it done via exception catching?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2. I've set a breakpoint on both AlfrescoRuntimeException and InvalidNodeRefException (caught and uncaught) and only the latter breaks for the code in the original post. Still, the transaction gets marked as rollback. Any idea why this could be? In what other way can a transaction be marked as rollback?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3. The strange thing is that after the code from the original post is run in a &lt;/SPAN&gt;&lt;STRONG&gt;a webapp running alongside the Web Client&lt;/STRONG&gt;&lt;SPAN&gt;, the Web Client itself has a transaction that is marked for rollback Ã¢â‚¬â€œ even though these are different threads! As a consequence, users cannot log in anymore without errors and see this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;An error occurred in one of the dashlets.&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Failed to get to do tasks: javax.transaction.RollbackException: The transaction has already been marked for rollback&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Failed to get pooled tasks: javax.transaction.RollbackException: The transaction has already been marked for rollback&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Failed to get all active tasks: javax.transaction.RollbackException: The transaction has already been marked for rollback&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it true that only the &lt;/SPAN&gt;&lt;STRONG&gt;current&lt;/STRONG&gt;&lt;SPAN&gt; transaction is marked for rollback and not all?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Kaspar&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 04 Feb 2008 09:28:09 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124629#M87693</guid>
      <dc:creator>hbf</dc:creator>
      <dc:date>2008-02-04T09:28:09Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124630#M87694</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Kaspar,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Tu debug this kind of crash, you can set a breakpoint in org.springframework.transaction.support.ResourceHolderSupport, method setRollbackOnly().&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 04 Feb 2008 14:29:28 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124630#M87694</guid>
      <dc:creator>rivarola</dc:creator>
      <dc:date>2008-02-04T14:29:28Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124631#M87695</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Rivarola, thanks a lot for your kind hint. Using it, I found out the following but Ã¢â‚¬â€œ unfortunately Ã¢â‚¬â€œ am again stuck.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In order to isolate what is going on, I've added the following code to CutNodeEvaluator.java (in Alfresco's SVN code); it is COMPLETE NONSENSE semantically but serves to reproduce the behaviour I am struggling with.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;package org.alfresco.web.action.evaluator;&lt;BR /&gt;&lt;BR /&gt;import javax.faces.context.FacesContext;&lt;BR /&gt;&lt;BR /&gt;import org.alfresco.web.bean.repository.Node;&lt;BR /&gt;import org.alfresco.web.action.ActionEvaluator;&lt;BR /&gt;import org.alfresco.model.ContentModel;&lt;BR /&gt;import org.alfresco.service.cmr.dictionary.DictionaryService;&lt;BR /&gt;import org.alfresco.service.cmr.repository.NodeRef;&lt;BR /&gt;import org.alfresco.service.cmr.repository.NodeService;&lt;BR /&gt;import org.alfresco.service.cmr.security.AuthenticationService;&lt;BR /&gt;import org.alfresco.service.namespace.QName;&lt;BR /&gt;import org.alfresco.service.transaction.TransactionService;&lt;BR /&gt;import org.alfresco.web.bean.ml.MultilingualUtils;&lt;BR /&gt;&lt;BR /&gt;import javax.faces.context.FacesContext;&lt;BR /&gt;import javax.transaction.UserTransaction;&lt;BR /&gt;&lt;BR /&gt;import org.alfresco.web.app.servlet.FacesHelper;&lt;BR /&gt;&lt;BR /&gt;public class CutNodeEvaluator extends BaseActionEvaluator&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public boolean evaluate(Node node)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // BEGIN for debugging only&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FacesContext fc = FacesContext.getCurrentInstance();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NodeService nodeService = (NodeService) FacesHelper.getManagedBean(fc, "NodeService");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TransactionService transactionService = (TransactionService) FacesHelper.getManagedBean(fc, "TransactionService");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AuthenticationService authenticationService = (AuthenticationService) FacesHelper.getManagedBean(fc, "AuthenticationService");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserTransaction transaction = null;&lt;BR /&gt;&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; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //transaction = transactionService.getNonPropagatingUserTransaction(); // (**)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //transaction.begin(); // (**)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //authenticationService.authenticate("admin", "J8uqw82_".toCharArray()); // (**)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NodeRef nodeRef = new NodeRef("workspace://SpacesStore/rubbish"); // invalid input&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //int status = transaction.getStatus(); // 0&amp;nbsp; // (**)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //System.err.println(status);&amp;nbsp; // (**)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nodeService.getProperty(nodeRef, ContentModel.PROP_CATEGORIES);&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; catch (Exception e)&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;&amp;nbsp;&amp;nbsp; // int status = transaction.getStatus(); // (*)&amp;nbsp; // (**)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // System.err.println(status); // (**)&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; // transaction.commit();&amp;nbsp; // (**)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception e)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // END for debugging only&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // just some dummy return value&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&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;/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;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;If you build Alfresco using this code and list the contents of a space in the Web Client with a few content nodes, a InvalidNodeRefException will be thrown. This results in a rollback (break on setRollbackOnly() to see this, as Rivarola suggested). But otherwise, you can log in, log out of the Web Client and everything works.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;(Kevin: It seems that Spring is not configured to only rollback on AlfrescoRuntimeException but on RuntimeException's or Error's, see org/springframework/transaction/interceptor/DefaultTransactionAttribute.java, method rollbackOn(). At least, in my case, the latter method gets called…)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Nowthe strange behaviour: If you uncomment the 8 lines with (**) and rebuild, the transactions are also rolled back but you &lt;/SPAN&gt;&lt;STRONG&gt;cannot&lt;/STRONG&gt;&lt;SPAN&gt; log in/log out anymore without errors showing up: The transaction has already been marked for rollback, etc.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What am I doing wrong?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Even stranger: If I do the same in a different Tomcat webapp (implying: in a different thread of Tomcat with its &lt;/SPAN&gt;&lt;A href="http://forums.alfresco.com/viewtopic.php?t=9931=" rel="nofollow noopener noreferrer"&gt;own transactions&lt;/A&gt;&lt;SPAN&gt;), it knocks out the Web Client, too! How can this be?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Many thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Kaspar&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 04 Feb 2008 17:02:11 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124631#M87695</guid>
      <dc:creator>hbf</dc:creator>
      <dc:date>2008-02-04T17:02:11Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124632#M87696</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I've added a &lt;/SPAN&gt;&lt;A href="http://issues.alfresco.com/browse/AR-2059" rel="nofollow noopener noreferrer"&gt;JIRA issue&lt;/A&gt;&lt;SPAN&gt; for this and am available if further debugging is needed.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Feb 2008 13:17:05 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124632#M87696</guid>
      <dc:creator>hbf</dc:creator>
      <dc:date>2008-02-05T13:17:05Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124633#M87697</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Has anybody got an idea how to fix this? We are running into "transaction already marked for rollback" exceptions regularly and after these we cannot log in again, as discussed &lt;/SPAN&gt;&lt;A href="http://forums.alfresco.com/viewtopic.php?t=10391#p35871" rel="nofollow noopener noreferrer"&gt;above&lt;/A&gt;&lt;SPAN&gt;. So we have to restart the server which is really annoying.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for any hint!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Kaspar&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 May 2008 09:49:25 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124633#M87697</guid>
      <dc:creator>hbf</dc:creator>
      <dc:date>2008-05-21T09:49:25Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124634#M87698</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The JIRA issue mentioned above has changed: It is now &lt;/SPAN&gt;&lt;A href="https://issues.alfresco.com/browse/ALFCOM-1800" rel="nofollow noopener noreferrer"&gt;this issue&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jun 2008 13:16:27 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124634#M87698</guid>
      <dc:creator>hbf</dc:creator>
      <dc:date>2008-06-27T13:16:27Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124635#M87699</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Hi,&lt;BR /&gt;&lt;BR /&gt;I need some advice from a Spring transaction guru, it seems: I don't get the following to work&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserTransaction transaction = transactionService.getNonPropagatingUserTransaction();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transaction.begin();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationService.authenticate(LOGIN, PASSWORD.toCharArray());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NodeRef nodeRef = new NodeRef("workspace://SpacesStore/rubbish"); // invalid input&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int status = alfrescoContext.getTransaction().getStatus(); // 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nodeService.getProperty(nodeRef, ContentModel.PROP_CATEGORIES);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception e)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int status = alfrescoContext.getTransaction().getStatus(); // (*)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; transaction.commit();&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;/CODE&gt;&lt;/PRE&gt;…&lt;BR /&gt;Regards,&lt;BR /&gt;Kaspar&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, Kaspar&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any exception that passes through the Spring transactional layers and has not been explicitly declared will force the transaction to be marked for rollback.&amp;nbsp; So, InvalidNodeRefException will render the transaction as "ROLLBACK_ONLY".&amp;nbsp; You can't reuse the transaction or continue with it.&amp;nbsp; That's the first thing.&amp;nbsp; You work around this by doing NodeService.exists(), or by having alternate actions in a new transaction after you catch an exception.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The second thing is that you need to be 100% sure that the transactions are not leaked out of scope.&amp;nbsp; There are three ways to do this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Fix up the try-catch-finally behaviour&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2. (Recommended) Use the RetryingTransactionHelper available from TransactionService.&amp;nbsp; It doesn't leak transactions!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3. Switch on debug to detect any leaked transactions: &lt;/SPAN&gt;&lt;STRONG&gt;log4j.logger.org.alfresco.util.transaction.SpringAwareUserTransaction.trace=DEBUG&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Derek&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Oct 2008 12:51:30 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124635#M87699</guid>
      <dc:creator>derek</dc:creator>
      <dc:date>2008-10-08T12:51:30Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124636#M87700</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;The second thing is that you need to be 100% sure that the transactions are not leaked out of scope.&amp;nbsp; There are three ways to do this.&lt;BR /&gt;1. Fix up the try-catch-finally behaviour&lt;BR /&gt;2. (Recommended) Use the RetryingTransactionHelper available from TransactionService.&amp;nbsp; It doesn't leak transactions!&lt;BR /&gt;3. Switch on debug to detect any leaked transactions: &lt;STRONG&gt;log4j.logger.org.alfresco.util.transaction.SpringAwareUserTransaction.trace=DEBUG&lt;/STRONG&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Derek,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Many thanks for looking into this, very much appreciated. With your &lt;/SPAN&gt;&lt;A href="https://issues.alfresco.com/jira/browse/ALFCOM-2000" rel="nofollow noopener noreferrer"&gt;explanations&lt;/A&gt;&lt;SPAN&gt;, I now understand how this strange behaviour - error from one request "persisted" in the next request - could occur:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;In your case, the unclosed transaction is going back into the thread pool. The next operation that attempts to start a new transaction on that thread will generate the "already marked for rollback" exception. That's exactly right. The transaction is still open, you're asking to continue doing some work on the transaction but the transaction is guaranteed to rollback.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Regarding the three ways you mention: I understand that you recommend RetryingTransactionHelper and I am actually using it in our Web layer (which is done in Wicket). However, it seems to be against the normal way in which one would handle an update request: In my web app, I'd like to open a transaction at the beginning of the request, then the MVC code of the web app (scattered over many Wicket components) would make calls to the Alfresco NodeService API and finally a commit() call would save the changes. With RetryingTransactionHelper, however, I cannot (?) do this but am instead forced to collect all calls to the NodeService API in one method, which does not seem natural. Do you have any recommendation for a situation like this?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for your help,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Kaspar&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Oct 2008 13:49:58 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124636#M87700</guid>
      <dc:creator>hbf</dc:creator>
      <dc:date>2008-10-08T13:49:58Z</dc:date>
    </item>
    <item>
      <title>Re: Transaction rolled back</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124637#M87701</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;…&lt;BR /&gt;Regarding the three ways you mention: I understand that you recommend RetryingTransactionHelper and I am actually using it in our Web layer (which is done in Wicket). However, it seems to be against the normal way in which one would handle an update request: In my web app, I'd like to open a transaction at the beginning of the request, then the MVC code of the web app (scattered over many Wicket components) would make calls to the Alfresco NodeService API and finally a commit() call would save the changes. With RetryingTransactionHelper, however, I cannot (?) do this but am instead forced to collect all calls to the NodeService API in one method, which does not seem natural. Do you have any recommendation for a situation like this?&lt;BR /&gt;&lt;BR /&gt;Thanks for your help,&lt;BR /&gt;Kaspar&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, Kaspar&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;You don't &lt;/SPAN&gt;&lt;EM&gt;have&lt;/EM&gt;&lt;SPAN&gt; to use the retrying, of course.&amp;nbsp; Normally there is a single entry point to the service call where the transaction can be declared, but it's not always convenient or even possible; we have some bits where the transaction start and transaction commit are separated e.g. JCR and CIFS implementations.&amp;nbsp; The critical thing, though, is not to leak the transaction under any circumstances.&amp;nbsp; When your commit/rollback code is possibly not going to get called, you should get very nervous; if you're not using RetryingTransactionHelper then make sure your QA includes running with the transaction leak detection enabled.&amp;nbsp; Aside from all those caveats, you need to do something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Transaction txn = txnService.getUserTranscation(…);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; try&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txn.begin();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do stuff&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txn.commit();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; catch (Throwable e)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Try a rollback.&amp;nbsp; This doesn't always work if the txn is already marked for rollback.&amp;nbsp; But who cares as long as it is rolled back!&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; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txn.rollback();&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; catch (Throwable e)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Just log, don't rethrow&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; // Rethrow original exception&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw e;&lt;BR /&gt;&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;/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;SPAN&gt;Now, naturally, the outer try-catch can be virtual or implemented by some other mechanism.&amp;nbsp; But either commit OR rollback must be called and the rollback should be wrapped in a try-catch to absorb any exception (illegal state, etc) that might hide the underlying, original exception that triggered the rollback in the first place.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Oct 2008 08:18:59 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/transaction-rolled-back/m-p/124637#M87701</guid>
      <dc:creator>derek</dc:creator>
      <dc:date>2008-10-09T08:18:59Z</dc:date>
    </item>
  </channel>
</rss>

