在不重启整个实例的情况下更新 camel-sap 缓存

Update camel-sap cache without restarting the whole instance

我正在使用 RedHat's camel-sap component in RedHat Fuse 通过 SAP RFC 调用模块。每次调整模块的结构时,Fuse 实例都必须重新启动 以缓存更新的 SAP 存储库。有没有办法使用 SAP 存储库更新缓存而无需重新启动实例?

简短的回答是否定的。

在 SAP 系统中更改 RFC 的结构是一项重大的系统更改。该组件旨在与稳定的生产 SAP 系统集成并缓存 SAP 元数据以提高效率。我假设您必须在开发环境中修改 RFC。如果是这种情况,那么您需要重新启动任何连接的 Fuse 容器,因为您已经更改了 SAP 系统。

这个 camel-sap 组件似乎使用了 SAP Java 连接器 (JCo) 和 Java IDoc Class 库 (JIDocLIb)。

出于性能原因,这些库将 RFC 和 IDoc 所需的元数据永久存储在内存中。但是这些库还提供了用于从缓存中删除元数据或清除整个元数据存储库的 API。因此,可以在使用 camel-sap 组件时以某种方式实现所需的功能,或者如果您可以直接访问所用的 SAP 连接器 API,则可以在 Java 中自行实现。

不可能的是元数据缓存在ABAP后端修改后会自动清除或失效。但由于我不了解骆驼树液,我在这里无法提供更多帮助。

我打开了 RedHat 的支持票,并接受了添加清除 JCo 存储库缓存和数据层功能的建议。 @Punkhorn 的 task has been created and implemented。谢谢!

支持票据指出,从 7.2 版开始,此功能将包含在 Fuse 中。所以如果你使用这个版本或者更新的版本,可以通过如下方式清除缓存:

<to uri="sap-clear-cache" />