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 e311879dab5917a546567b9e181bd58ae34cae62..f45081187287026c6960f6f7f24f3cfd065ba029 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 23dd4244bb68cf1c500e2d3ca18116cd3bfe9004..6e258a942610cdeafec269038a3bdd35de8712d2 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" /> <!--