use of com.adobe.acs.commons.httpcache.engine.CacheContent in project acs-aem-commons by Adobe-Consulting-Services.
the class JCRHttpCacheStoreImpl method getIfPresent.
@Override
public CacheContent getIfPresent(final CacheKey key) {
final long currentTime = System.currentTimeMillis();
incrementRequestCount();
return withSession(new Function<Session, CacheContent>() {
@Override
public CacheContent apply(Session session) throws Exception {
final BucketNodeFactory factory = new BucketNodeFactory(session, cacheRootPath, key, bucketTreeDepth);
final Node bucketNode = factory.getBucketNode();
if (bucketNode != null) {
final Node entryNode = new BucketNodeHandler(bucketNode, dclm).getEntryIfExists(key);
final CacheContent content = new EntryNodeToCacheContentHandler(entryNode).get();
if (content != null) {
incrementTotalLookupTime(System.currentTimeMillis() - currentTime);
incrementHitCount();
return content;
}
}
incrementTotalLookupTime(System.currentTimeMillis() - currentTime);
incrementMissCount();
return null;
}
});
}
use of com.adobe.acs.commons.httpcache.engine.CacheContent in project acs-aem-commons by Adobe-Consulting-Services.
the class EntryNodeMapVisitor method entering.
protected void entering(final Node node, int level) throws RepositoryException {
super.entering(node, level);
if (isCacheEntryNode(node)) {
CacheKey cacheKey;
try {
cacheKey = getCacheKey(node);
CacheContent content = getCacheContent(node);
cache.put(cacheKey, content);
} catch (Exception e) {
log.error("Error in reading cache node!", e);
}
}
}
use of com.adobe.acs.commons.httpcache.engine.CacheContent in project acs-aem-commons by Adobe-Consulting-Services.
the class EntryNodeMapVisitorTest method test5entries.
@Test
public void test5entries() throws Exception {
final RootNodeMockFactory.Settings settings = new RootNodeMockFactory.Settings();
settings.setEntryNodeCount(5);
final Node rootNode = new RootNodeMockFactory(settings).build();
final EntryNodeMapVisitor visitor = getMockedNodeMapVisitor();
visitor.visit(rootNode);
final Map<CacheKey, CacheContent> cache = visitor.getCache();
assertEquals(5, cache.size());
}
use of com.adobe.acs.commons.httpcache.engine.CacheContent in project acs-aem-commons by Adobe-Consulting-Services.
the class EntryNodeMapVisitorTest method test10entries.
@Test
public void test10entries() throws Exception {
final RootNodeMockFactory.Settings settings = new RootNodeMockFactory.Settings();
settings.setEntryNodeCount(10);
final Node rootNode = new RootNodeMockFactory(settings).build();
final EntryNodeMapVisitor visitor = getMockedNodeMapVisitor();
visitor.visit(rootNode);
final Map<CacheKey, CacheContent> cache = visitor.getCache();
assertEquals(10, cache.size());
}
use of com.adobe.acs.commons.httpcache.engine.CacheContent in project acs-aem-commons by Adobe-Consulting-Services.
the class HttpCacheEngineImpl method cacheResponse.
@Override
public void cacheResponse(SlingHttpServletRequest request, SlingHttpServletResponse response, HttpCacheConfig cacheConfig) throws HttpCacheKeyCreationException, HttpCacheDataStreamException, HttpCachePersistenceException {
// TODO - This can be made asynchronous to avoid performance penalty on response cache.
CacheContent cacheContent = null;
try {
// Construct the cache content.
HttpCacheServletResponseWrapper responseWrapper = null;
if (response instanceof HttpCacheServletResponseWrapper) {
responseWrapper = (HttpCacheServletResponseWrapper) response;
} else {
throw new AssertionError("Programming error.");
}
CacheKey cacheKey = cacheConfig.buildCacheKey(request);
cacheContent = new CacheContent().build(responseWrapper);
// Persist in cache.
if (isRequestCachableAccordingToHandlingRules(request, response, cacheConfig, cacheContent)) {
getCacheStore(cacheConfig).put(cacheKey, cacheContent);
log.debug("Response for the URI cached - {}", request.getRequestURI());
}
} finally {
// Close the temp sink input stream.
if (null != cacheContent) {
IOUtils.closeQuietly(cacheContent.getInputDataStream());
}
}
}
Aggregations