From c303c1018168820e64f76bb964498c1e880ebade Mon Sep 17 00:00:00 2001 From: dxasupport Date: Tue, 4 Mar 2025 16:53:56 +0000 Subject: [PATCH] Adding a cache wrapper around the call to getting StaticContentItems. --- .../mapping/impl/GraphQLContentProvider.java | 38 ++++++++++++++----- .../impl/GraphQLContentProviderTest.java | 3 +- dxa-webapp/pom.xml | 4 +- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/dxa-framework/dxa-tridion-provider/src/main/java/com/sdl/dxa/tridion/mapping/impl/GraphQLContentProvider.java b/dxa-framework/dxa-tridion-provider/src/main/java/com/sdl/dxa/tridion/mapping/impl/GraphQLContentProvider.java index 430158ac7..ccb824d10 100644 --- a/dxa-framework/dxa-tridion-provider/src/main/java/com/sdl/dxa/tridion/mapping/impl/GraphQLContentProvider.java +++ b/dxa-framework/dxa-tridion-provider/src/main/java/com/sdl/dxa/tridion/mapping/impl/GraphQLContentProvider.java @@ -3,6 +3,7 @@ import com.sdl.dxa.api.datamodel.model.ContentModelData; import com.sdl.dxa.api.datamodel.model.EntityModelData; import com.sdl.dxa.api.datamodel.model.PageModelData; +import com.sdl.dxa.caching.NamedCacheProvider; import com.sdl.dxa.caching.statistics.CacheStatisticsProvider; import com.sdl.dxa.common.dto.EntityRequestDto; import com.sdl.dxa.common.dto.PageRequestDto; @@ -44,10 +45,13 @@ import org.springframework.web.context.request.RequestContextHolder; import jakarta.servlet.http.HttpSession; + +import javax.cache.Cache; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -65,6 +69,7 @@ public class GraphQLContentProvider extends AbstractContentProvider implements C private final WebRequestContext webRequestContext; private ApiClientProvider pcaClientProvider; private CacheManager cacheManager; + private NamedCacheProvider namedCacheProvider; private CacheStatisticsProvider cacheStatisticsProvider; @Autowired @@ -73,6 +78,7 @@ public GraphQLContentProvider(WebRequestContext webRequestContext, ModelBuilderPipeline builderPipeline, GraphQLProvider graphQLProvider, ApiClientProvider pcaClientProvider, @Qualifier("compositeCacheManager") CacheManager cacheManager, + NamedCacheProvider namedCacheProvider, CacheStatisticsProvider cacheStatisticsProvider) { super(webRequestContext, cacheManager); this.webRequestContext = webRequestContext; @@ -81,6 +87,7 @@ public GraphQLContentProvider(WebRequestContext webRequestContext, this.staticContentResolver = staticContentResolver; this.builderPipeline = builderPipeline; this.graphQLProvider = graphQLProvider; + this.namedCacheProvider = namedCacheProvider; this.cacheStatisticsProvider = cacheStatisticsProvider; } @@ -160,23 +167,36 @@ private boolean isNoMediaCache(String path, String localizationPath) { return !FileUtils.isEssentialConfiguration(path, localizationPath) && webRequestContext.isSessionPreview(); } - /** - * {@inheritDoc} - * - */ @Override public @NotNull StaticContentItem getStaticContent(String path, String localizationId, String localizationPath) throws ContentProviderException { + if (namedCacheProvider == null || !namedCacheProvider.isCacheEnabled("staticContentItems")) { + return processStaticContent(path, localizationId, localizationPath); + } + else { + String cacheKeyInput = String.format("%s%s%s", path, localizationId, localizationPath); + String cacheKey = UUID.nameUUIDFromBytes(cacheKeyInput.getBytes()).toString(); + Cache staticContentItemsCache = namedCacheProvider.getCache("staticContentItems"); + StaticContentItem staticContentItem = (StaticContentItem)staticContentItemsCache.get(cacheKey); + if (staticContentItem == null) { + staticContentItem = processStaticContent(path, localizationId, localizationPath); + staticContentItemsCache.put(cacheKey, staticContentItem); + if (this.cacheStatisticsProvider != null) { + this.cacheStatisticsProvider.storeStatsInfo("staticContentItems", staticContentItem); + } + } + return staticContentItem; + } + } + + public @NotNull StaticContentItem processStaticContent(String path, String localizationId, String localizationPath) + throws ContentProviderException { StaticContentRequestDto requestDto = StaticContentRequestDto.builder(path, localizationId) .localizationPath(localizationPath) .baseUrl(webRequestContext.getBaseUrl()) .noMediaCache(isNoMediaCache(path, localizationPath)) .build(); - StaticContentItem staticContentItem = staticContentResolver.getStaticContent(requestDto); - if (cacheStatisticsProvider != null) { - cacheStatisticsProvider.storeStatsInfo("staticContentItems", staticContentItem); - } - return staticContentItem; + return staticContentResolver.getStaticContent(requestDto); } protected PageModel loadPage(String path, Localization localization) throws ContentProviderException { diff --git a/dxa-framework/dxa-tridion-provider/src/test/java/com/sdl/dxa/tridion/mapping/impl/GraphQLContentProviderTest.java b/dxa-framework/dxa-tridion-provider/src/test/java/com/sdl/dxa/tridion/mapping/impl/GraphQLContentProviderTest.java index d7e84ec6c..9987ae560 100644 --- a/dxa-framework/dxa-tridion-provider/src/test/java/com/sdl/dxa/tridion/mapping/impl/GraphQLContentProviderTest.java +++ b/dxa-framework/dxa-tridion-provider/src/test/java/com/sdl/dxa/tridion/mapping/impl/GraphQLContentProviderTest.java @@ -67,6 +67,7 @@ public void setup() { graphQLProvider, apiClientProvider, cacheManager, + null, cacheStatisticsProvider )); } @@ -103,7 +104,7 @@ public void getStaticContent() throws Exception { when(staticContentResolver.getStaticContent(any(StaticContentRequestDto.class))).thenReturn(new StaticContentItem("testType", contentFile, false)); - StaticContentItem result = contentProvider.getStaticContent("/static", "localizationId", "localilzationPath"); + StaticContentItem result = contentProvider.getStaticContent("/static", "localizationId", "localizationPath"); assertEquals("path", contentFile.getName()); assertEquals("testType", result.getContentType()); diff --git a/dxa-webapp/pom.xml b/dxa-webapp/pom.xml index d695e10ea..9a8d65933 100644 --- a/dxa-webapp/pom.xml +++ b/dxa-webapp/pom.xml @@ -5,7 +5,7 @@ com.sdl.dxa dxa-oss-parent - 2.3.5-SNAPSHOT + 2.3.7-SNAPSHOT ../pom.xml @@ -201,7 +201,7 @@ com.sdl.dxa dxa-oss-parent - 2.3.5-SNAPSHOT + 2.3.7-SNAPSHOT pom import