diff --git a/src/main/java/org/olat/admin/sysinfo/ThreadInfosManager.java b/src/main/java/org/olat/admin/sysinfo/ThreadInfosManager.java index bfa8d954bafcccabc42b137923e65977f8709023..e0c4dc9fb4e8e1403572a04d806aec36d47251cc 100644 --- a/src/main/java/org/olat/admin/sysinfo/ThreadInfosManager.java +++ b/src/main/java/org/olat/admin/sysinfo/ThreadInfosManager.java @@ -26,13 +26,13 @@ import java.lang.management.ThreadMXBean; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -55,7 +55,7 @@ public class ThreadInfosManager implements Sampler { private final static NumberFormat percentFormat = NumberFormat.getPercentInstance(Locale.ENGLISH); private long prevUpTime; - private Map<Long,ThreadView> threadMap = new HashMap<Long,ThreadView>(); + private Map<Long,ThreadView> threadMap = new ConcurrentHashMap<Long,ThreadView>(); public List<ThreadView> getThreadViews() { if(threadMap.isEmpty()) { diff --git a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java index a168bc9c1e12763ccf55792fc107fe84a3bcf14a..b8ef4f4f032558bbf460b3ec98991315acd259b2 100644 --- a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java +++ b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java @@ -22,10 +22,10 @@ package org.olat.core.dispatcher.mapper.manager; import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import org.olat.core.dispatcher.DispatcherAction; import org.olat.core.dispatcher.mapper.Mapper; @@ -51,9 +51,9 @@ import org.springframework.stereotype.Service; @Service("mapperService") public class MapperServiceImpl implements MapperService { - private Map<String,Mapper> mapperIdToMapper = new HashMap<String,Mapper>(); - private Map<Mapper,String> mapperToMapperId = new HashMap<Mapper, String>(); - private Map<String,List<String>> sessionIdToMapperIds = new HashMap<String,List<String>>(); + private Map<String,Mapper> mapperIdToMapper = new ConcurrentHashMap<String,Mapper>(); + private Map<Mapper,String> mapperToMapperId = new ConcurrentHashMap<Mapper, String>(); + private Map<String,List<String>> sessionIdToMapperIds = new ConcurrentHashMap<String,List<String>>(); private CacheWrapper mapperCache; diff --git a/src/main/java/org/olat/core/gui/media/ClasspathMediaResource.java b/src/main/java/org/olat/core/gui/media/ClasspathMediaResource.java index afa9f3265b798c8884ba6f90ceab26b401b4185f..a11a3ca6e26e6bf5a95a83cc3b95ee7bbb37967c 100644 --- a/src/main/java/org/olat/core/gui/media/ClasspathMediaResource.java +++ b/src/main/java/org/olat/core/gui/media/ClasspathMediaResource.java @@ -32,8 +32,8 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.UnknownHostException; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.jar.JarFile; import java.util.zip.ZipEntry; @@ -58,8 +58,8 @@ public class ClasspathMediaResource extends LogDelegator implements MediaResourc private Long size; private URL url; // local cache to minimize access to jar content (expensive) - private static final Map<String,Long> cachedJarResourceLastModified = new HashMap<String, Long>(); - private static final Map<String,Long> cachedJarResourceSize = new HashMap<String, Long>(); + private static final Map<String,Long> cachedJarResourceLastModified = new ConcurrentHashMap<String, Long>(); + private static final Map<String,Long> cachedJarResourceSize = new ConcurrentHashMap<String, Long>(); /** * Constructor that uses class loader of this (ClasspathMediaResource) class diff --git a/src/main/java/org/olat/core/logging/Tracing.java b/src/main/java/org/olat/core/logging/Tracing.java index 6962bea0e974de356ee03aba31ed4cdd46b05edf..cf7be02986d6470bb0c6b7716ee63c4273acb086 100644 --- a/src/main/java/org/olat/core/logging/Tracing.java +++ b/src/main/java/org/olat/core/logging/Tracing.java @@ -28,10 +28,10 @@ package org.olat.core.logging; import java.util.Collections; import java.util.Comparator; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.servlet.http.HttpServletRequest; @@ -107,7 +107,7 @@ public class Tracing { private static long __performanceRefNum__ = 0; // VM local cache to have one logger object per class - private static final Map<Class, OLog> loggerLookupMap = new HashMap<Class, OLog>(); + private static final Map<Class, OLog> loggerLookupMap = new ConcurrentHashMap<Class, OLog>(); /** * per-thread singleton holding the actual HttpServletRequest which is the diff --git a/src/main/java/org/olat/core/util/event/businfo/BusListenerInfos.java b/src/main/java/org/olat/core/util/event/businfo/BusListenerInfos.java index 0fe7192481fd31cca9291eeaa694dfda9bed895a..cbefe06fa017ea520f9bd9480b3e18eef75b6e9d 100644 --- a/src/main/java/org/olat/core/util/event/businfo/BusListenerInfos.java +++ b/src/main/java/org/olat/core/util/event/businfo/BusListenerInfos.java @@ -25,11 +25,11 @@ */ package org.olat.core.util.event.businfo; -import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; -import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import org.olat.core.id.OLATResourceable; @@ -48,7 +48,7 @@ import org.olat.core.id.OLATResourceable; */ public class BusListenerInfos { // key: nodeId, values: a map with keys: derivedString of a olatresourceable; values: listener count of this node - private Map<Integer, BusListenerInfo> nodeBusInfos = new HashMap<Integer, BusListenerInfo>(); + private Map<Integer, BusListenerInfo> nodeBusInfos = new ConcurrentHashMap<Integer, BusListenerInfo>(); public int getListenerCountFor(OLATResourceable ores) { synchronized (nodeBusInfos) {//cluster_ok @@ -73,13 +73,13 @@ public class BusListenerInfos { } public String getAsString() { + StringBuilder sb = new StringBuilder(); Set<String> allNodesDerivedStrings = new TreeSet<String>(); // the derived strings are sorted then for (BusListenerInfo busInfo : nodeBusInfos.values()) { allNodesDerivedStrings.addAll(busInfo.getAllDerivedStrings()); } // for each derived-string, print out the total number of listeners, and the contribution of each node - StringBuilder sb = new StringBuilder(); for (String derived : allNodesDerivedStrings) { int total = 0; sb.append(derived).append(" : "); @@ -90,11 +90,7 @@ public class BusListenerInfos { total+= cnt; } sb.append(" Sum:").append(total).append("<br />"); - } return sb.toString(); } - - - } diff --git a/src/main/java/org/olat/core/util/i18n/I18nManager.java b/src/main/java/org/olat/core/util/i18n/I18nManager.java index 2eadd5fca2e9247806cb33abe42605916146650c..0d2e714bdec9804654146198e66bbdca84df843b 100644 --- a/src/main/java/org/olat/core/util/i18n/I18nManager.java +++ b/src/main/java/org/olat/core/util/i18n/I18nManager.java @@ -50,6 +50,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.ConcurrentHashMap; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; @@ -128,9 +129,9 @@ public class I18nManager extends BasicManager { // keys: bundlename ":" locale.toString() (e.g. "org.olat.admin:de_DE"); // values: PropertyFile - private Map<String, Properties> cachedBundles = new HashMap<String, Properties>(); - private Map<String, String> cachedJSTranslatorData = new HashMap<String, String>(); - private Map<String, Set<String>> referencingBundlesIndex = new HashMap<String, Set<String>>(); + private Map<String, Properties> cachedBundles = new ConcurrentHashMap<String, Properties>(); + private Map<String, String> cachedJSTranslatorData = new ConcurrentHashMap<String, String>(); + private Map<String, Set<String>> referencingBundlesIndex = new ConcurrentHashMap<String, Set<String>>(); private boolean cachingEnabled = true; private static FilenameFilter i18nFileFilter = new FilenameFilter() { @@ -1543,9 +1544,9 @@ public class I18nManager extends BasicManager { */ public void setCachingEnabled(boolean useCache) { if (useCache) { - cachedBundles = new HashMap<String, Properties>(); - cachedJSTranslatorData = new HashMap<String, String>(); - referencingBundlesIndex = new HashMap<String, Set<String>>(); + cachedBundles = new ConcurrentHashMap<String, Properties>(); + cachedJSTranslatorData = new ConcurrentHashMap<String, String>(); + referencingBundlesIndex = new ConcurrentHashMap<String, Set<String>>(); } else { cachedBundles = new AlwaysEmptyMap<String, Properties>(); cachedJSTranslatorData = new AlwaysEmptyMap<String, String>(); diff --git a/src/main/java/org/olat/core/util/threadlog/RequestBasedLogLevelManager.java b/src/main/java/org/olat/core/util/threadlog/RequestBasedLogLevelManager.java index d74103fb144a5e53e186c5c222e3484e2047db43..7abc5d21364c39add5c2e8d643fe1cffc493ac80 100644 --- a/src/main/java/org/olat/core/util/threadlog/RequestBasedLogLevelManager.java +++ b/src/main/java/org/olat/core/util/threadlog/RequestBasedLogLevelManager.java @@ -24,9 +24,9 @@ */ package org.olat.core.util.threadlog; -import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; +import java.util.concurrent.ConcurrentHashMap; import javax.servlet.http.HttpServletRequest; @@ -53,7 +53,7 @@ public class RequestBasedLogLevelManager { private final String PROP_NAME_REQUESTBASED_IPS = "RequestBasedIps"; /** The core of this class is this map containing the list of ip addresses mapped to logconfigs **/ - private final Map<String,LogConfig> remoteAddrs2LogConfigs = new HashMap<String,LogConfig>(); + private final Map<String,LogConfig> remoteAddrs2LogConfigs = new ConcurrentHashMap<String,LogConfig>(); /** A reference to the persistentProperties used to persistent the ip address map **/ private PersistedProperties persistentProperties; diff --git a/src/main/java/org/olat/core/util/threadlog/UserBasedLogLevelManager.java b/src/main/java/org/olat/core/util/threadlog/UserBasedLogLevelManager.java index 6fd452428b369cbeea6f10da5f0fea78d02d1c41..3c2b25f91e009ffbd79599abc00da34f073d7a6b 100644 --- a/src/main/java/org/olat/core/util/threadlog/UserBasedLogLevelManager.java +++ b/src/main/java/org/olat/core/util/threadlog/UserBasedLogLevelManager.java @@ -24,9 +24,9 @@ */ package org.olat.core.util.threadlog; -import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; +import java.util.concurrent.ConcurrentHashMap; import org.apache.log4j.Appender; import org.apache.log4j.Level; @@ -51,7 +51,7 @@ public class UserBasedLogLevelManager { private final String PROP_NAME_USERNAMES2LEVELS = "Usernames2Levels"; /** The core of this class is this map containing the list of usernames mapped to logconfigs **/ - private final Map<String,LogConfig> username2LogConfig = new HashMap<String,LogConfig>(); + private final Map<String,LogConfig> username2LogConfig = new ConcurrentHashMap<String,LogConfig>(); /** A reference to the persistentProperties used to persistent the usernames map **/ private PersistedProperties persistentProperties; diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java index 0e36ac188301a4baa66c2d35928360d03941425e..8fae2b097b2f48458d9a581f20c172880b5de9b4 100644 --- a/src/main/java/org/olat/course/CourseFactory.java +++ b/src/main/java/org/olat/course/CourseFactory.java @@ -28,7 +28,6 @@ package org.olat.course; import java.io.File; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -144,11 +143,11 @@ import org.olat.util.logging.activity.LoggingResourceable; public class CourseFactory extends BasicManager { private static CacheWrapper loadedCourses; - private static ConcurrentHashMap <Long, ModifyCourseEvent> modifyCourseEvents = new ConcurrentHashMap <Long, ModifyCourseEvent>(); + private static ConcurrentHashMap<Long, ModifyCourseEvent> modifyCourseEvents = new ConcurrentHashMap<Long, ModifyCourseEvent>(); public static final String COURSE_EDITOR_LOCK = "courseEditLock"; //this is the lock that must be aquired at course editing, copy course, export course, configure course. - private static Map<Long,PersistingCourseImpl> courseEditSessionMap = new HashMap<Long,PersistingCourseImpl>(); + private static Map<Long,PersistingCourseImpl> courseEditSessionMap = new ConcurrentHashMap<Long,PersistingCourseImpl>(); private static OLog log = Tracing.createLoggerFor(CourseFactory.class); private static RepositoryManager repositoryManager; private static OLATResourceManager olatResourceManager; diff --git a/src/main/java/org/olat/course/assessment/AssessmentMainController.java b/src/main/java/org/olat/course/assessment/AssessmentMainController.java index 770ee1c8f6d49c4cbee0308cb635aa8caa048ee9..ace827bcf1a517a5d59ce5ce56991db5843d7d2c 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentMainController.java +++ b/src/main/java/org/olat/course/assessment/AssessmentMainController.java @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang.StringEscapeUtils; import org.olat.admin.user.UserTableDataModel; @@ -195,8 +196,8 @@ AssessmentMainController(UserRequest ureq, WindowControl wControl, StackedContro this.stackPanel = stackPanel; this.ores = ores; this.callback = assessmentCallback; - localUserCourseEnvironmentCache = new HashMap<Long, UserCourseEnvironment>(10000); - initialLaunchDates = new HashMap<Long,Date>(10000); + localUserCourseEnvironmentCache = new ConcurrentHashMap<Long, UserCourseEnvironment>(); + initialLaunchDates = new ConcurrentHashMap<Long,Date>(); //use the PropertyHandlerTranslator as tableCtr translator propertyHandlerTranslator = UserManager.getInstance().getPropertyHandlerTranslator(getTranslator()); @@ -1113,7 +1114,7 @@ AssessmentMainController(UserRequest ureq, WindowControl wControl, StackedContro ICourse course = CourseFactory.loadCourse(ores); // 1) preload assessment cache with database properties long start = 0; - boolean logDebug = true || log.isDebug(); + boolean logDebug = log.isDebug(); if(logDebug) start = System.currentTimeMillis(); List<Identity> identities = getAllAssessableIdentities(); course.getCourseEnvironment().getAssessmentManager().preloadCache(identities); @@ -1126,7 +1127,7 @@ AssessmentMainController(UserRequest ureq, WindowControl wControl, StackedContro if (Thread.interrupted()) break; } if (logDebug) { - log.info("Preloading of user course environment cache for course::" + course.getResourceableId() + " for " + log.debug("Preloading of user course environment cache for course::" + course.getResourceableId() + " for " + localUserCourseEnvironmentCache.size() + " user course environments. Loading time::" + (System.currentTimeMillis() - start) + "ms"); } diff --git a/src/main/java/org/olat/restapi/security/RestSecurityBeanImpl.java b/src/main/java/org/olat/restapi/security/RestSecurityBeanImpl.java index 90cdb1c83fd036a3ba755ac447f3576555c3f01c..91dd98f3b16d6e0e3c0136fd2279d0d97f13d920 100644 --- a/src/main/java/org/olat/restapi/security/RestSecurityBeanImpl.java +++ b/src/main/java/org/olat/restapi/security/RestSecurityBeanImpl.java @@ -20,10 +20,10 @@ package org.olat.restapi.security; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import javax.servlet.http.HttpSession; @@ -42,9 +42,9 @@ import org.olat.core.util.StringHelper; */ public class RestSecurityBeanImpl implements RestSecurityBean { - private Map<String,Long> tokenToIdentity = new HashMap<String,Long>(); - private Map<String,List<String>> tokenToSessionIds = new HashMap<String,List<String>>(); - private Map<String,String> sessionIdToTokens = new HashMap<String,String>(); + private Map<String,Long> tokenToIdentity = new ConcurrentHashMap<String,Long>(); + private Map<String,List<String>> tokenToSessionIds = new ConcurrentHashMap<String,List<String>>(); + private Map<String,String> sessionIdToTokens = new ConcurrentHashMap<String,String>(); @Override public String generateToken(Identity identity, HttpSession session) {