2

我需要在我的程序中始终保持某些文件的最新内容。我创建了一个 EMF 资源集。

因为resourceSet.getResource(resourceURI, true)需要很长时间才能完成我将资源集存储在静态字段中,所以可以缓存文件。

即,一旦resourceSet.getResource(resourceURI, true)为某个 URI 调用该文件缓存在resourceSet.

问题是它resourceSet不会自动更新它的缓存:

IE:

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来考虑修改印章?

4

1 回答 1

4

两件事:首先,如果你想重新加载资源,你必须调用

aResource.unload([..]);
aResource.load([..])

由于 EMF 以任何方式都不需要 Eclipse,Resource并且ResourceSet类与 Eclipse 工作区IResource子类不同,这意味着更改文件系统上的文件不会导致重新加载 EMF 资源。

不过,这很容易做到,看看XxxxEditor为您生成的 EMF,类实例化 aIResourceChangeListener将在修改文件时从 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
    }
}
于 2011-02-22T07:25:25.283 回答