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 @@
+