From a22cae083eef1fd774fbd4a2480e8c8af366c1e7 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 2 Feb 2016 08:59:16 +0100 Subject: [PATCH] OO-1873: optimize the synchronized statement in the course node factory --- .../olat/course/nodes/CourseNodeFactory.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/olat/course/nodes/CourseNodeFactory.java b/src/main/java/org/olat/course/nodes/CourseNodeFactory.java index 4cd2375a1c0..675156d733b 100644 --- a/src/main/java/org/olat/course/nodes/CourseNodeFactory.java +++ b/src/main/java/org/olat/course/nodes/CourseNodeFactory.java @@ -35,6 +35,7 @@ import java.util.Map; import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; +import org.olat.core.configuration.PreWarm; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; import org.olat.core.logging.OLog; @@ -51,7 +52,7 @@ import org.olat.repository.handlers.RepositoryHandlerFactory; * @author Mike Stock * @author guido */ -public class CourseNodeFactory { +public class CourseNodeFactory implements PreWarm { private static final OLog log = Tracing.createLoggerFor(CourseNodeFactory.class); @@ -73,6 +74,12 @@ public class CourseNodeFactory { return INSTANCE; } + @Override + public void run() { + getAllCourseNodeConfigurations(); + } + + /** * @return the list of enabled aliases */ @@ -88,13 +95,18 @@ public class CourseNodeFactory { return alias; } - private synchronized Map<String,CourseNodeConfiguration> getAllCourseNodeConfigurations() { + private Map<String,CourseNodeConfiguration> getAllCourseNodeConfigurations() { if(allCourseNodeConfigurations == null) { - allCourseNodeConfigurations = new HashMap<String, CourseNodeConfiguration>(); - Map<String, CourseNodeConfiguration> courseNodeConfigurationMap = CoreSpringFactory.getBeansOfType(CourseNodeConfiguration.class); - Collection<CourseNodeConfiguration> courseNodeConfigurationValues = courseNodeConfigurationMap.values(); - for (CourseNodeConfiguration courseNodeConfiguration : courseNodeConfigurationValues) { - allCourseNodeConfigurations.put(courseNodeConfiguration.getAlias(), courseNodeConfiguration); + synchronized(INSTANCE) { + if(allCourseNodeConfigurations == null) { + Map<String, CourseNodeConfiguration> configurationMap = new HashMap<>(); + Map<String, CourseNodeConfiguration> courseNodeConfigurationMap = CoreSpringFactory.getBeansOfType(CourseNodeConfiguration.class); + Collection<CourseNodeConfiguration> courseNodeConfigurationValues = courseNodeConfigurationMap.values(); + for (CourseNodeConfiguration courseNodeConfiguration : courseNodeConfigurationValues) { + configurationMap.put(courseNodeConfiguration.getAlias(), courseNodeConfiguration); + } + allCourseNodeConfigurations = Collections.unmodifiableMap(configurationMap); + } } } return allCourseNodeConfigurations; -- GitLab