我在获取文档时正在查看Alfresco的日志,我可以看到每次我尝试检索相同的文档(相同的ID)时,都会向远程存储库发出GET请求。
我运行了一个测试,在多次调用session.getObject(id)
之前,我显式调用session.getDefaultContext().setCacheEnabled(true)
。似乎缓存被忽略了,因为每次都会发出 GET 命令。
您是否认为可能应该在我缺少的会话上设置其他属性?或者也许是Alfresco的一些xml配置?
谢谢
这取决于您用于检索文档的文档 ID。Alfresco的CMIS文档ID看起来像这样(注意";v.v"部分):
workspace://SpacesStore/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;v.v
Alfresco也接受看起来像节点ID的文档ID(注意缺少的";v.v"部分)来检索文档,但总是返回上面的格式。
workspace://SpacesStore/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
OpenCMIS 缓存使用第一个文档 ID 格式(带有";v.v"部分)作为缓存键。如果您使用的是第二种格式,您将永远不会受到缓存命中,并且客户端必须再次向存储库询问文档数据。
似乎适用于getObject,但对于实际检索内容,不使用缓存:
Document document = (Document)session.getObject(id);
document.getContentStream().getStream();
最后一行触发 GET 以alfresco_root/folder/content/doc_name?id=id;version
客户端缓存是否可以实际用于存储文档内容?