【问题标题】:Does invalidating order remove order from Item cache?无效订单是否会从项目缓存中删除订单?
【发布时间】:2014-09-09 22:45:17
【问题描述】:

我的假设是,当我们通过调用orderImpl.invalidateOrder() 使订单无效时,它所做的只是将容器设置为空,从而在下一次调用(比如)getCommerceItem() 期间,refreshOrder 管道被执行并加载项目.

我的问题是 - 即使我们使订单无效,但当 refreshOrder 管道执行时,它会从项目缓存(如果可用)加载订单,表明订单不会从 orderImpl.invalidateOrder 上的缓存中删除?

【问题讨论】:

  • 在内部 invalidateOrder() 将设置一个标志以使存储库缓存无效。这仅在您调用ensureContainers() 时触发,由getCommerceItems() 调用。你有什么不一样的地方吗?
  • 啊..我对 OrderRepository 有一些扩展 - 没有清除缓存。看起来在我的 getCustomObjects() 中,我需要处理这个。

标签: atg


【解决方案1】:

从 ATG10.2 及以下版本讲...

(我认为)ATG 的缓存/订单失效存在错误。

正如@radimpe 评论所暗示的,如果您调用OrderImpl.invalidateOrder(),那么下次访问Order 对象中的任何内容时,都应该使用未缓存的RepositoryItems。

但是,ATG 的存储库缓存实际上是通过将它从缓存中删除的项目放入 WeakReference 中来工作的,这意味着它会立即将项目从缓存中取回。所以功能被破坏了,恕我直言。

除非有人更了解?

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2011-10-21
    • 1970-01-01
    • 2012-09-16
    • 2011-04-15
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多