From 2452550e1a85580673704ee5a5bb62dedb1dac6c Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Tue, 5 Mar 2013 19:54:44 +0000 Subject: [PATCH] BIS-317 SP-481 : Retry optimistic locking failures on the GUI API. SVN: 28532 --- .../generic/server/OptimisticLockingRetryAdvisor.java | 9 ++++++++- openbis/source/java/genericApplicationContext.xml | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/OptimisticLockingRetryAdvisor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/OptimisticLockingRetryAdvisor.java index e311879dab5..f4508118728 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/OptimisticLockingRetryAdvisor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/OptimisticLockingRetryAdvisor.java @@ -22,6 +22,7 @@ import org.apache.log4j.Logger; import org.springframework.aop.ClassFilter; import org.springframework.aop.MethodMatcher; import org.springframework.aop.Pointcut; +import org.springframework.aop.framework.ReflectiveMethodInvocation; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.RootClassFilter; import org.springframework.core.Ordered; @@ -81,7 +82,13 @@ public class OptimisticLockingRetryAdvisor extends DefaultPointcutAdvisor { // System.out.println("try " + (i + 1) + ". time: " // + invocation.getMethod().getName() + "@" + invocation.getThis()); - return invocation.proceed(); + if (invocation instanceof ReflectiveMethodInvocation) + { + return ((ReflectiveMethodInvocation) invocation).invocableClone().proceed(); + } else + { + return invocation.proceed(); + } } catch (Exception ex) { latestException = ex; diff --git a/openbis/source/java/genericApplicationContext.xml b/openbis/source/java/genericApplicationContext.xml index 23dd4244bb6..6e258a94261 100644 --- a/openbis/source/java/genericApplicationContext.xml +++ b/openbis/source/java/genericApplicationContext.xml @@ -308,6 +308,11 @@ <bean class="ch.systemsx.cisd.openbis.common.spring.LogAdvisor" /> <bean class="ch.systemsx.cisd.openbis.common.spring.MarkerLogApplicationListener"/> + + <!-- + // Optimistic Lock Failure Retrying + --> + <bean class="ch.systemsx.cisd.openbis.generic.server.OptimisticLockingRetryAdvisor" /> <!-- -- GitLab