Index: lams_common/src/java/org/lamsfoundation/lams/applicationContext.xml
===================================================================
diff -u -ra6641bf9262a01d07740a517643f8fe187ec5b1f -r0b8f5f74ece9677e18c0eb54194c6cec604d5769
--- lams_common/src/java/org/lamsfoundation/lams/applicationContext.xml (.../applicationContext.xml) (revision a6641bf9262a01d07740a517643f8fe187ec5b1f)
+++ lams_common/src/java/org/lamsfoundation/lams/applicationContext.xml (.../applicationContext.xml) (revision 0b8f5f74ece9677e18c0eb54194c6cec604d5769)
@@ -49,5 +49,6 @@
In case of optimistic locking exceptions it retrires the transaction up to 5 times -->
+
\ No newline at end of file
Index: lams_common/src/java/org/lamsfoundation/lams/web/filter/TransactionRetryInterceptor.java
===================================================================
diff -u -re5d5c08d34883b3336660cc68cb576ef1494671a -r0b8f5f74ece9677e18c0eb54194c6cec604d5769
--- lams_common/src/java/org/lamsfoundation/lams/web/filter/TransactionRetryInterceptor.java (.../TransactionRetryInterceptor.java) (revision e5d5c08d34883b3336660cc68cb576ef1494671a)
+++ lams_common/src/java/org/lamsfoundation/lams/web/filter/TransactionRetryInterceptor.java (.../TransactionRetryInterceptor.java) (revision 0b8f5f74ece9677e18c0eb54194c6cec604d5769)
@@ -25,12 +25,17 @@
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
+import org.apache.commons.lang.mutable.MutableInt;
import org.apache.log4j.Logger;
+import org.hibernate.FlushMode;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.LockAcquisitionException;
import org.lamsfoundation.lams.util.ITransactionRetryService;
import org.springframework.dao.CannotAcquireLockException;
import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.transaction.UnexpectedRollbackException;
/**
@@ -44,50 +49,53 @@
private static final Logger log = Logger.getLogger(TransactionRetryInterceptor.class);
private ITransactionRetryService transactionRetryService;
+ private SessionFactory sessionFactory;
private static final int MAX_ATTEMPTS = 5;
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
- int attempt = 1;
+ MutableInt attempt = new MutableInt(1);
Throwable exception = null;
do {
try {
- if (attempt == 1) {
+ if (attempt.intValue() == 1) {
return invocation.proceed();
} else {
return transactionRetryService.retry(invocation);
}
} catch (DataIntegrityViolationException e) {
exception = e;
- attempt++;
- TransactionRetryInterceptor.processException(e, invocation, attempt);
+ processException(e, invocation, attempt);
} catch (ConstraintViolationException e) {
exception = e;
- attempt++;
- TransactionRetryInterceptor.processException(e, invocation, attempt);
+ processException(e, invocation, attempt);
} catch (CannotAcquireLockException e) {
exception = e;
- attempt++;
- TransactionRetryInterceptor.processException(e, invocation, attempt);
+ processException(e, invocation, attempt);
} catch (LockAcquisitionException e) {
exception = e;
- attempt++;
- TransactionRetryInterceptor.processException(e, invocation, attempt);
+ processException(e, invocation, attempt);
} catch (UnexpectedRollbackException e) {
exception = e;
- attempt++;
- TransactionRetryInterceptor.processException(e, invocation, attempt);
+ processException(e, invocation, attempt);
}
- } while (attempt <= TransactionRetryInterceptor.MAX_ATTEMPTS);
+ } while (attempt.intValue() <= TransactionRetryInterceptor.MAX_ATTEMPTS);
throw exception;
}
- private static void processException(Exception e, MethodInvocation invocation, int attempt) {
+ private void processException(Exception e, MethodInvocation invocation, MutableInt attempt) {
StringBuilder message = new StringBuilder("When invoking method \"").append(invocation.getMethod().getName())
- .append("\" caught ").append(e.getMessage()).append(". Attempt #").append(attempt - 1);
- if (attempt <= TransactionRetryInterceptor.MAX_ATTEMPTS) {
+ .append("\" caught \"").append(e.getMessage()).append("\". Attempt #").append(attempt);
+
+ attempt.increment();
+ if (attempt.intValue() <= TransactionRetryInterceptor.MAX_ATTEMPTS) {
message.append(". Retrying.");
+
+ // the exception could have closed the session; try to recreate it here
+ Session session = SessionFactoryUtils.getSession(sessionFactory, true);
+ // same as in CustomizedOpenSessionInViewFilter
+ session.setFlushMode(FlushMode.AUTO);
} else {
message.append(". Giving up.");
}
@@ -97,4 +105,8 @@
public void setTransactionRetryService(ITransactionRetryService transactionRetryService) {
this.transactionRetryService = transactionRetryService;
}
+
+ public void setSessionFactory(SessionFactory sessionFactory) {
+ this.sessionFactory = sessionFactory;
+ }
}
\ No newline at end of file
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java
===================================================================
diff -u -r8fd538f0e69320e969865342d94c7c1cbc936977 -r0b8f5f74ece9677e18c0eb54194c6cec604d5769
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 8fd538f0e69320e969865342d94c7c1cbc936977)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 0b8f5f74ece9677e18c0eb54194c6cec604d5769)
@@ -169,8 +169,7 @@
AssessmentSession session = getAssessmentSessionBySessionId(toolSessionId);
AssessmentUser groupLeader = session.getGroupLeader();
- boolean isUserLeader = (groupLeader != null) && user.getUid().equals(groupLeader.getUid());
- return isUserLeader;
+ return (groupLeader != null) && user.getUserId().equals(groupLeader.getUserId());
}
@Override
Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java
===================================================================
diff -u -r3b18838d7e4786ef34e83e7c9fc3740553279510 -r0b8f5f74ece9677e18c0eb54194c6cec604d5769
--- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision 3b18838d7e4786ef34e83e7c9fc3740553279510)
+++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision 0b8f5f74ece9677e18c0eb54194c6cec604d5769)
@@ -33,15 +33,13 @@
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
-import java.util.concurrent.Callable;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
@@ -75,7 +73,6 @@
import org.lamsfoundation.lams.web.session.SessionManager;
import org.lamsfoundation.lams.web.util.AttributeNames;
import org.lamsfoundation.lams.web.util.SessionMap;
-import org.springframework.dao.CannotAcquireLockException;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
@@ -90,8 +87,8 @@
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException, JSONException,
- ScratchieApplicationException {
+ HttpServletResponse response)
+ throws IOException, ServletException, JSONException, ScratchieApplicationException {
String param = mapping.getParameter();
// -----------------------Scratchie Learner function ---------------------------
@@ -160,12 +157,7 @@
user = getCurrentUser(toolSessionId);
}
- final ScratchieUser groupLeader = (ScratchieUser) tryExecute(new Callable