diff --git a/calendar/calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/BaseCalendarService.java b/calendar/calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/BaseCalendarService.java index bf2a27f40985..2b45dd892914 100644 --- a/calendar/calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/BaseCalendarService.java +++ b/calendar/calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/BaseCalendarService.java @@ -60,6 +60,7 @@ import org.sakaiproject.site.api.Site; import org.sakaiproject.site.api.SiteService; import org.sakaiproject.site.api.ToolConfiguration; +import org.sakaiproject.thread_local.api.ThreadLocalManager; import org.sakaiproject.time.api.Time; import org.sakaiproject.time.api.TimeBreakdown; import org.sakaiproject.time.api.TimeRange; @@ -496,6 +497,9 @@ public void setServerConfigurationService(ServerConfigurationService service) /** Depedency: SessionManager */ protected SessionManager m_sessionManager = null; + /** Dependency: ThreadLocalManager */ + protected ThreadLocalManager m_threadLocalManager = null; + /** Dependency: TimeService */ protected TimeService m_timeService = null; @@ -590,6 +594,16 @@ public void setSessionManager(SessionManager sessionManager) this.m_sessionManager = sessionManager; } + /** + * Dependency: ThreadLocalManager. + * @param threadLocalManager + * The ThreadLocalManager. + */ + public void setThreadLocalManager(ThreadLocalManager threadLocalManager) + { + this.m_threadLocalManager = threadLocalManager; + } + /** * Dependency: TimeService. * @param timeService @@ -753,7 +767,19 @@ public boolean allowGetCalendar(String ref) */ protected Calendar findCalendar(String ref) { - Calendar calendar = m_storage.getCalendar(ref); + // TODO: do we really want to do this? -ggolden + // if we have done this already in this thread, use that + Calendar calendar = (Calendar) m_threadLocalManager.get(ref); + if (calendar == null) + { + calendar = m_storage.getCalendar(ref); + + // "cache" the calendar in the current service in case they are needed again in this thread... + if (calendar != null) + { + m_threadLocalManager.set(ref, calendar); + } + } return calendar; } // findCalendar diff --git a/calendar/calendar-impl/pack/src/webapp/WEB-INF/components.xml b/calendar/calendar-impl/pack/src/webapp/WEB-INF/components.xml index 011e1612b76d..3fe7a783f80e 100644 --- a/calendar/calendar-impl/pack/src/webapp/WEB-INF/components.xml +++ b/calendar/calendar-impl/pack/src/webapp/WEB-INF/components.xml @@ -20,6 +20,7 @@ +