}
// If the last visit time is not available in the default list of summary revisions,
// we need to query the datastore for the full list of revisions. This is slow,
// but is not expected to happen often.
if (!livingStory.dateWithinAvailableRevisions(lastVisitTime)) {
// TODO: decide if this should be an async call from the client.
livingStory = livingStoryDataService.retrieveById(livingStoryId, false);
}
ExternalServiceKeyChain keyChain = new ExternalServiceKeyChain(getServletContext());