使用 SDK > 3.0 进行缓存 - 未配置 CachingProvider

Caching with SDK > 3.0 - No CachingProviders have been configured

我正在尝试使用 java SDK 版本 3.9.0 进行一些缓存后端调用。我找到的关于 SDK 版本 > 3.0.0 的缓存的唯一资源是官方发行说明和 this 9 月份社区更新回调的回放视频。

在或多或少地从视频中复制代码并根据我的目的对其进行调整后,我想出了以下方法来尝试缓存自己:

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());
}

但是,当我尝试 运行 此命令时,出现以下异常 javax.cache.CacheException: No CachingProviders have been configured。正如发行说明所建议的那样,我将咖啡因作为 JCache 实现添加为我的应用程序 pom 的依赖项,但错误仍然存​​在。

问题是,我做错了什么?感谢任何帮助。

已更新

应 Emdee 的要求,这里是异常的完整堆栈跟踪:

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(RequestAccessorFilter.java:71)
    at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.lambda$execute[=11=](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)

更新 2

依赖树来自mvn dependency:tree。不幸的是,输出对于堆栈溢出来说太大了,所以我创建了这个粘贴箱:https://pastebin.com/tu0HFi5B

查看关于迁移到 SAP Cloud SDK 的blog post,它显示需要以下依赖项:

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