我需要在程序中始终保持某些文件的最新内容。 我已经创建了一个EMF资源集。
由于resourceSet.getResource(resourceURI, true)
需要花费大量时间才能完成,因此我将资源集存储在静态字段中,因此可以缓存文件。
即。一旦为某个URI调用resourceSet.getResource(resourceURI, true)
,该文件将缓存在resourceSet
。
问题是resourceSet
不会自动更新它的缓存:
即:
resourceSet.getResource(resourceURI, true);
// delete resourceURI from file system
// Here I expect null, but old version of the file is returned
resourceSet.getResource(resourceURI, true);
如果需要,如何强制resourceSet
更新缓存?
我正在使用org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
,但我可能需要另一个版本的ResourceSet
来考虑修改标记?
答案 0 :(得分:4)
两件事:首先,如果你想重新加载资源,你必须调用
aResource.unload([..]);
aResource.load([..])
由于EMF不以任何方式要求Eclipse,Resource
和ResourceSet
类与Eclipse工作区IResource
子类不同,这意味着更改文件系统上的文件将不会导致重新加载EMF资源。
这很容易做到,看一下为你生成的XxxxEditor
EMF,该类实例化一个IResourceChangeListener
,它将在修改文件时从Eclipse工作区接收增量。生成的侦听器通过重新加载资源来处理这些增量。
protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
public void resourceChanged(IResourceChangeEvent event) {
IResourceDelta delta = event.getDelta();
//find out which EMF Resource matches with the IResource and reload it
}
}