Reputation: 79
I am trying to make some cached backend calls with the java SDK version 3.9.0. The only resource I found concering caching with the SDK version > 3.0.0 was the official release notes and this replay video of a community update call back in september.
After more or less copying the code from the video and adjusting it for my purposes I came up with the following to try caching myself:
private final ResilienceConfiguration configuration;
private final String purchaseOrder;
public GetSupplierFromPOCommand(String purchaseOrder) {
this.purchaseOrder = purchaseOrder;
this.configuration = ResilienceConfiguration.of(GetSupplierFromPOCommand.class)
.cacheConfiguration(ResilienceConfiguration.CacheConfiguration.of(Duration.ofHours(1)).withParameters(purchaseOrder));
}
public PurchaseOrder execute() {
logger.info("Running " + this.getClass().getName() + " ...");
Callable<PurchaseOrder> poCallable = ResilienceDecorator.decorateCallable(this::run, configuration);
try {
return poCallable.call();
} catch (Exception e) {
throw new RuntimeException("Failed to retrieve purchase order", e);
}
}
private PurchaseOrder run() throws ODataException {
Destination destination = DestinationAccessor.getDestination(DESTINATION_NAME);
return new DefaultPurchaseOrderService()
.getPurchaseOrderByKey(purchaseOrder)
.select(PurchaseOrder.SUPPLIER)
.execute(destination.asHttp());
}
However, when I try to run this command I get the following exception javax.cache.CacheException: No CachingProviders have been configured
. As suggested by the release notes I added caffeine as a JCache implementation as a dependency to my application pom, but the error still remains the same.
The question is, what am I doing wrong here? Any help is appreciated.
Updated
As requested by Emdee, here is the complete stack trace of the exception:
javax.cache.CacheException: No CachingProviders have been configured
at javax.cache.Caching$CachingProviderRegistry.getCachingProvider(Caching.java:112)
at javax.cache.Caching$CachingProviderRegistry.getCachingProvider(Caching.java:99)
at javax.cache.Caching.getCachingProvider(Caching.java:50)
at com.sap.cloud.sdk.frameworks.resilience4j.DefaultCachingDecorator.decorateCallable(DefaultCachingDecorator.java:79)
at com.sap.cloud.sdk.frameworks.resilience4j.Resilience4jDecorationStrategy.decorateCallable(Resilience4jDecorationStrategy.java:112)
at com.sap.cloud.sdk.frameworks.resilience4j.Resilience4jDecorationStrategy.decorateCallable(Resilience4jDecorationStrategy.java:85)
at com.sap.cloud.sdk.cloudplatform.resilience.ResilienceDecorationStrategy.decorateCallable(ResilienceDecorationStrategy.java:149)
at com.sap.cloud.sdk.cloudplatform.resilience.ResilienceDecorator.decorateCallable(ResilienceDecorator.java:172)
at com.allgeier.mdescanner.commands.businesspartner.GetSupplierFromPOCommand.execute(GetSupplierFromPOCommand.java:33)
at com.allgeier.mdescanner.util.GoodsProcessingUtil.convertWhseTaskToSupplierFullNameTask(GoodsProcessingUtil.java:153)
at com.allgeier.mdescanner.util.GoodsProcessingUtil.createdExtendedTask(GoodsProcessingUtil.java:134)
at com.allgeier.mdescanner.util.GoodsProcessingUtil.processOrderListRequest(GoodsProcessingUtil.java:61)
at com.allgeier.mdescanner.servlet.GoodsReceiptServlet.processGetRequest(GoodsReceiptServlet.java:47)
at com.allgeier.mdescanner.servlet.GoodsReceiptServlet.doGet(GoodsReceiptServlet.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.lambda$doFilter$1(RequestAccessorFilter.java:71)
at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.lambda$execute$0(AbstractThreadContextExecutor.java:317)
at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextCallable.call(ThreadContextCallable.java:247)
at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.execute(AbstractThreadContextExecutor.java:319)
at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.doFilter(RequestAccessorFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpCachingHeaderFilter.doFilter(HttpCachingHeaderFilter.java:80)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter.doFilter(HttpSecurityHeadersFilter.java:41)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:610)
at com.sap.cloud.runtime.impl.bridge.security.AbstractAuthenticator.invoke(AbstractAuthenticator.java:206)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at com.sap.cloud.runtime.kotee.jta.cleaner.LeakedTransactionsReportValve.invoke(LeakedTransactionsReportValve.java:155)
at com.sap.core.tenant.valve.TenantValidationValve.invokeNextValve(TenantValidationValve.java:182)
at com.sap.core.tenant.valve.TenantValidationValve.invoke(TenantValidationValve.java:97)
at com.sap.js.statistics.tomcat.valve.RequestTracingValve.callNextValve(RequestTracingValve.java:113)
at com.sap.js.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:59)
at com.sap.core.js.monitoring.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:27)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Update 2
Dependency tree via mvn dependency:tree
. Unfortunately the output is too large for stack overflow, so I created this paste bin: https://pastebin.com/tu0HFi5B
Upvotes: 0
Views: 1098