From f83674711dd566d9a46188b6442757e94f0b88d4 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Thu, 30 Apr 2020 13:38:24 +0200
Subject: [PATCH] no-jira: release DB connections earlier in some cases

---
 src/main/java/org/olat/NewControllerFactory.java              | 2 ++
 src/main/java/org/olat/commons/calendar/ICalServlet.java      | 2 +-
 .../olat/commons/calendar/manager/ImportCalendarManager.java  | 4 ++--
 src/main/java/org/olat/core/gui/components/Window.java        | 2 ++
 src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java | 2 ++
 src/main/java/org/olat/restapi/system/ProcSamplerJob.java     | 2 +-
 6 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/NewControllerFactory.java b/src/main/java/org/olat/NewControllerFactory.java
index 857b10c3902..7e1c347fc82 100644
--- a/src/main/java/org/olat/NewControllerFactory.java
+++ b/src/main/java/org/olat/NewControllerFactory.java
@@ -35,6 +35,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.olat.core.commons.chiefcontrollers.BaseChiefController;
+import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Window;
@@ -252,6 +253,7 @@ public class NewControllerFactory {
 				launched = true;
 			}
 		}
+		DBFactory.getInstance().commit();
 		return launched;
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/commons/calendar/ICalServlet.java b/src/main/java/org/olat/commons/calendar/ICalServlet.java
index 4bbaad56da8..4bebb9cb16b 100644
--- a/src/main/java/org/olat/commons/calendar/ICalServlet.java
+++ b/src/main/java/org/olat/commons/calendar/ICalServlet.java
@@ -233,13 +233,13 @@ public class ICalServlet extends HttpServlet {
 			if(savedToken == null) {
 				savedToken = calendarManager.getCalendarToken(calendarType, calendarID, userName);
 			}
+			DBFactory.getInstance().commitAndCloseSession();
 			if (authToken == null || savedToken == null || !savedToken.equals(authToken)) {
 				log.warn("Authenticity Check failed for the ical feed path: {}", pathInfo);
 				response.sendError(HttpServletResponse.SC_UNAUTHORIZED, requestUrl);
 			} else {
 				// read and return the calendar file
 				Calendar calendar = calendarManager.readCalendar(calendarType, calendarID);
-				DBFactory.getInstance().commitAndCloseSession();
 				outputCalendar(calendar, request, response);
 			}
 		} else {
diff --git a/src/main/java/org/olat/commons/calendar/manager/ImportCalendarManager.java b/src/main/java/org/olat/commons/calendar/manager/ImportCalendarManager.java
index 7b448bb64aa..5592610b6b3 100644
--- a/src/main/java/org/olat/commons/calendar/manager/ImportCalendarManager.java
+++ b/src/main/java/org/olat/commons/calendar/manager/ImportCalendarManager.java
@@ -205,14 +205,14 @@ public class ImportCalendarManager {
 		String url = importedCalendar.getUrl();
 		Date lastUpdate = importedCalendar.getLastUpdate();
 		if (url != null && (timestamp - lastUpdate.getTime() > RELOAD_INTERVAL)) {
-			log.info("Calendar reload started from url=" + url);
+			log.info("Calendar reload started from url={}", url);
 			importedCalendar.setLastUpdate(new Date());
 			importedCalendar = importedCalendarDao.update(importedCalendar);
 			dbInstance.commit();
 			
 			String calendarId = importedCalendar.getCalendarId();
 			reloadCalendarFromUrl(url, CalendarManager.TYPE_USER, calendarId, filter);
-			log.info("Calendar reloaded from url=" + url);
+			log.info("Calendar reloaded from url={}", url);
 		}
 	}
 
diff --git a/src/main/java/org/olat/core/gui/components/Window.java b/src/main/java/org/olat/core/gui/components/Window.java
index ec18e379ee9..5207fdafc89 100644
--- a/src/main/java/org/olat/core/gui/components/Window.java
+++ b/src/main/java/org/olat/core/gui/components/Window.java
@@ -567,6 +567,7 @@ public class Window extends AbstractComponent implements CustomCSSDelegate {
 							log.debug("Perf-Test: Window durationBeforeServeResource=" + durationBeforeServeResource);
 						}
 						
+						DBFactory.getInstance().commit();
 						wbackofficeImpl.pushCommands(ureq, request, response);
 					}  catch (InvalidRequestParameterException e) {
 						try {
@@ -850,6 +851,7 @@ public class Window extends AbstractComponent implements CustomCSSDelegate {
 						debugMsg.append("inl_serve:").append(diff).append(LOG_SEPARATOR);
 					}
 			} 
+			DBFactory.getInstance().commit();
 			//else serve mediaresource, but postpone serving to when lock has been released,
 			// otherwise e.g. a large download blocks the window, so that the user cannot click until the download is finished
 		} // end of synchronized(this)
diff --git a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
index 1b5280e76f6..aff5838d4c1 100644
--- a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
+++ b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
@@ -278,6 +278,7 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe
 			return null;
 		}
 		
+		dbInstance.commit();
 		LdapContext ctx = bindSystem();
 		if (ctx == null) {
 			errors.insert("LDAP connection error");
@@ -307,6 +308,7 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe
 		}
 
 		try {
+			dbInstance.commit();
 			Control[] connectCtls = new Control[]{};
 			LdapContext userBind = new InitialLdapContext(env, connectCtls);
 			Attributes attributes = userBind.getAttributes(userDN, userAttr);
diff --git a/src/main/java/org/olat/restapi/system/ProcSamplerJob.java b/src/main/java/org/olat/restapi/system/ProcSamplerJob.java
index efdf2f1481e..da02978a87a 100644
--- a/src/main/java/org/olat/restapi/system/ProcSamplerJob.java
+++ b/src/main/java/org/olat/restapi/system/ProcSamplerJob.java
@@ -35,8 +35,8 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
-import org.olat.core.CoreSpringFactory;
 import org.apache.logging.log4j.Logger;
+import org.olat.core.CoreSpringFactory;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
 import org.olat.restapi.system.MonitoringService.Statistics;
-- 
GitLab