You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2009/03/22 08:22:31 UTC

svn commit: r757139 - in /portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE: components/page-manager/src/java/org/apache/jetspeed/page/impl/ components/page-manager/src/java/org/apache/jetspeed/util/interceptors/ components/page-manager/src...

Author: rwatler
Date: Sun Mar 22 07:22:30 2009
New Revision: 757139

URL: http://svn.apache.org/viewvc?rev=757139&view=rev
Log:
correct DBPM deadlock on addListener/clearTransaction

Modified:
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/test/database-page-manager-base.xml
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/db-page-manager.xml
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/interceptors.xml
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/import-page-manager.xml
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/interceptors.xml

Modified: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java?rev=757139&r1=757138&r2=757139&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java (original)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java Sun Mar 22 07:22:30 2009
@@ -489,7 +489,7 @@
     /**
      * Clear transactions registered with current thread.
      */
-    public synchronized static void clearTransactions()
+    public static void clearTransactions()
     {
         transactionedOperations.set(null);
     }

Modified: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java?rev=757139&r1=757138&r2=757139&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java (original)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java Sun Mar 22 07:22:30 2009
@@ -16,6 +16,10 @@
  */
 package org.apache.jetspeed.util.interceptors;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 import org.aopalliance.intercept.MethodInterceptor;
 import org.aopalliance.intercept.MethodInvocation;
 import org.apache.jetspeed.page.impl.DatabasePageManagerCache;
@@ -27,28 +31,81 @@
  */
 public class PageManagerInterceptor implements MethodInterceptor
 {
-
     /** Serialization version identifier */
     private static final long serialVersionUID = -1316279974504594833L;
-
+    
+    private final String[] cacheTransactionMethodsPrefix;
+    private final String[] cacheTransactionMethods;
+    
+    public PageManagerInterceptor(List cacheTransactionMethods)
+    {
+        List cacheTransactionMethodsPrefixList = new ArrayList();
+        List cacheTransactionMethodsList = new ArrayList();
+        for (Iterator iter = cacheTransactionMethods.iterator(); iter.hasNext();)
+        {
+            String cacheTransactionMethod = (String)iter.next();
+            if (cacheTransactionMethod.endsWith("*"))
+            {
+                cacheTransactionMethodsPrefixList.add(cacheTransactionMethod.substring(0,cacheTransactionMethod.length()-1));
+            }
+            else
+            {
+                cacheTransactionMethodsPrefixList.add(cacheTransactionMethod);
+            }
+        }
+        this.cacheTransactionMethodsPrefix = (String[]) cacheTransactionMethodsPrefixList.toArray(new String[cacheTransactionMethodsPrefixList.size()]);
+        this.cacheTransactionMethods = (String[]) cacheTransactionMethodsList.toArray(new String[cacheTransactionMethodsList.size()]);
+    }
+    
     /**
      * Encloses <code>super.invoke()</code> in a try/catch block, where the
      * catch block contains additional retry logic.
      */
     public Object invoke(MethodInvocation invocation) throws Throwable
     {
+        // filter DBPM cache transactional processing by method name
+        String methodName = invocation.getMethod().getName();
+        boolean performCacheTransactionProcessing = false;
+        for (int i = 0; (i < cacheTransactionMethodsPrefix.length); i++)
+        {
+            if (methodName.startsWith(cacheTransactionMethodsPrefix[i]))
+            {
+                performCacheTransactionProcessing = true;
+                break;
+            }
+        }
+        if (!performCacheTransactionProcessing)
+        {
+            for (int i = 0; (i < cacheTransactionMethods.length); i++)
+            {
+                if (methodName.equals(cacheTransactionMethods[i]))
+                {
+                    performCacheTransactionProcessing = true;
+                    break;
+                }
+            }
+        }
+        // invoke DBPM entry point
         try
         {            
             return invocation.proceed();
         } 
         catch (Exception exp)
         {
-            DatabasePageManagerCache.rollbackTransactions();
+            // rollback cache transactions
+            if (performCacheTransactionProcessing)
+            {
+                DatabasePageManagerCache.rollbackTransactions();
+            }
             throw exp;
         }
         finally
         {
-            DatabasePageManagerCache.clearTransactions();            
+            // clear cache transaction tracking
+            if (performCacheTransactionProcessing)
+            {
+                DatabasePageManagerCache.clearTransactions();
+            }
         }
     }
 

Modified: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/test/database-page-manager-base.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/test/database-page-manager-base.xml?rev=757139&r1=757138&r2=757139&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/test/database-page-manager-base.xml (original)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/components/page-manager/src/test/database-page-manager-base.xml Sun Mar 22 07:22:30 2009
@@ -49,6 +49,17 @@
     
     <!-- Transaction Proxying -->
     <bean id="pageManagerInterceptor" class="org.apache.jetspeed.util.interceptors.PageManagerInterceptor">
+        <!--
+            set cache transaction method name patterns for methods that
+            directly or indirectly add cache transactions so that they
+            can properly rollback and cleanup thread local storage
+        -->
+        <constructor-arg> 
+            <list>
+                <value>update*</value>
+                <value>addPages</value>
+            </list>
+        </constructor-arg>
     </bean>
 
     <bean id="pageManager" parent="baseTransactionProxy">
@@ -60,6 +71,11 @@
         </property>
         <property name="transactionAttributes">
             <props>
+              <!--
+                  note: set cache transaction method name patterns in pageManagerInterceptor
+                  for methods that directly or indirectly add cache transactions so that
+                  they can properly rollback and cleanup thread local storage
+              -->
               <prop key="getPage*">PROPAGATION_SUPPORTS</prop>  
               <prop key="getLink*">PROPAGATION_SUPPORTS</prop>  
               <prop key="getFolder*">PROPAGATION_SUPPORTS</prop>  

Modified: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/db-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/db-page-manager.xml?rev=757139&r1=757138&r2=757139&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/db-page-manager.xml (original)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/db-page-manager.xml Sun Mar 22 07:22:30 2009
@@ -45,6 +45,11 @@
       </property>
       <property name="transactionAttributes">
           <props>
+              <!--
+                  note: set cache transaction method name patterns in pageManagerInterceptor
+                  for methods that directly or indirectly add cache transactions so that
+                  they can properly rollback and cleanup thread local storage
+              -->
               <prop key="getPage*">PROPAGATION_SUPPORTS</prop>  
               <prop key="getLink*">PROPAGATION_SUPPORTS</prop>  
               <prop key="getFolder*">PROPAGATION_SUPPORTS</prop>  

Modified: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/interceptors.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/interceptors.xml?rev=757139&r1=757138&r2=757139&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/interceptors.xml (original)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/alternate/interceptors.xml Sun Mar 22 07:22:30 2009
@@ -24,6 +24,17 @@
 <beans>
 
     <bean id="pageManagerInterceptor" class="org.apache.jetspeed.util.interceptors.PageManagerInterceptor">
+        <!--
+            set cache transaction method name patterns for methods that
+            directly or indirectly add cache transactions so that they
+            can properly rollback and cleanup thread local storage
+        -->
+        <constructor-arg> 
+            <list>
+                <value>update*</value>
+                <value>addPages</value>
+            </list>
+        </constructor-arg>
     </bean>
 
 

Modified: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/import-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/import-page-manager.xml?rev=757139&r1=757138&r2=757139&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/import-page-manager.xml (original)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/maven-archetypes/portal/src/archetype/archetype-resources/etc/dbpsml/assembly/import-page-manager.xml Sun Mar 22 07:22:30 2009
@@ -44,6 +44,11 @@
         </property>
         <property name="transactionAttributes">
             <props>
+              <!--
+                  note: set cache transaction method name patterns in pageManagerInterceptor
+                  for methods that directly or indirectly add cache transactions so that
+                  they can properly rollback and cleanup thread local storage
+              -->
               <prop key="getPage*">PROPAGATION_SUPPORTS</prop>  
               <prop key="getLink*">PROPAGATION_SUPPORTS</prop>  
               <prop key="getFolder*">PROPAGATION_SUPPORTS</prop>  

Modified: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml?rev=757139&r1=757138&r2=757139&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml (original)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml Sun Mar 22 07:22:30 2009
@@ -45,6 +45,11 @@
       </property>
       <property name="transactionAttributes">
           <props>
+              <!--
+                  note: set cache transaction method name patterns in pageManagerInterceptor
+                  for methods that directly or indirectly add cache transactions so that
+                  they can properly rollback and cleanup thread local storage
+              -->
               <prop key="getPage*">PROPAGATION_SUPPORTS</prop>  
               <prop key="getLink*">PROPAGATION_SUPPORTS</prop>  
               <prop key="getFolder*">PROPAGATION_SUPPORTS</prop>  

Modified: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/interceptors.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/interceptors.xml?rev=757139&r1=757138&r2=757139&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/interceptors.xml (original)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/src/webapp/WEB-INF/assembly/alternate/interceptors.xml Sun Mar 22 07:22:30 2009
@@ -24,6 +24,17 @@
 <beans>
 
     <bean id="pageManagerInterceptor" class="org.apache.jetspeed.util.interceptors.PageManagerInterceptor">
+        <!--
+            set cache transaction method name patterns for methods that
+            directly or indirectly add cache transactions so that they
+            can properly rollback and cleanup thread local storage
+        -->
+        <constructor-arg> 
+            <list>
+                <value>update*</value>
+                <value>addPages</value>
+            </list>
+        </constructor-arg>
     </bean>
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org