diff --git a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java index e010140f5247668ac3fac46498e1ffba53685b20..94a7b5c5b2b18f2d355de2d3ea084310f07c9cab 100644 --- a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java +++ b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java @@ -164,25 +164,20 @@ public class ICalFileCalendarManager extends BasicManager implements CalendarMan String key = getKeyFor(type, calendarID); Kalendar cal = calendarCache.get(key); if(cal == null) { - //o_clusterOK by:cg - OLATResourceable calOres = OresHelper.createOLATResourceableType(getKeyFor(type,calendarID)); - cal = CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync( calOres, new SyncerCallback<Kalendar>() { - public Kalendar execute() { - return getCalendarFromCache(type, calendarID); - } - }); + cal = getCalendarFromCache(type, calendarID); } return cal; } private Kalendar getCalendarFromCache(final String callType, final String callCalendarID) { - String calKey = getKeyFor(callType,callCalendarID); - OLATResourceable calOres = OresHelper.createOLATResourceableType(calKey); - CoordinatorManager.getInstance().getCoordinator().getSyncer().assertAlreadyDoInSyncFor(calOres); + String calKey = getKeyFor(callType,callCalendarID); Kalendar cal = calendarCache.get(calKey); if (cal == null) { cal = loadOrCreateCalendar(callType, callCalendarID); - calendarCache.put(calKey, cal); + Kalendar cacheCal = calendarCache.putIfAbsent(calKey, cal); + if(cacheCal != null) { + cal = cacheCal; + } } return cal; } diff --git a/src/main/java/org/olat/core/util/cache/CacheWrapper.java b/src/main/java/org/olat/core/util/cache/CacheWrapper.java index 17e3697c8cd1246dbb0fa7a56b552153b7233d9f..207f6d12994d9b7ffaac66cb82a0f139e80af013 100644 --- a/src/main/java/org/olat/core/util/cache/CacheWrapper.java +++ b/src/main/java/org/olat/core/util/cache/CacheWrapper.java @@ -89,6 +89,8 @@ public interface CacheWrapper<U, V extends Serializable> { */ public V put(U key, V value); + public V putIfAbsent(U key, V value); + /** * In the case of distributed cache, the list can be partial and * you must carefully setup your cache. diff --git a/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java index ae9c1f93ec053edc48ef3be33f6ed2dadf07dbd5..26af5fe4de263b99c80e5fac55d5bef8e955ffc0 100644 --- a/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java +++ b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java @@ -102,4 +102,11 @@ public class InfinispanCacheWrapper<U,V extends Serializable> implements CacheWr V oldOne = cache.put(key, value); return oldOne; } + + @Override + public V putIfAbsent(U key, V value) { + return cache.putIfAbsent(key, value); + } + + } \ No newline at end of file