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