floste
floste

Reputation: 79

Caching with SDK > 3.0 - No CachingProviders have been configured

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

Answers (1)

Emdee
Emdee

Reputation: 1701

Checking out the blog post about migration to the SAP Cloud SDK, it reveals that the following dependency is needed:

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>jcache</artifactId>
    <version>2.7.0</version>
</dependency>

Upvotes: 3

Related Questions