2

プログラム内の一部のファイルのコンテンツを常に最新の状態にする必要があります。EMF リソース セットを作成しました。

完了するまでに時間がかかるためresourceSet.getResource(resourceURI, true)、リソースセットを静的フィールドに保存して、ファイルをキャッシュできるようにします。

resourceSet.getResource(resourceURI, true)つまり、ファイルがキャッシュされている URI に対して一度呼び出されます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

4

1 に答える 1

4

2 つのこと: まず、リソースをリロードする場合は、呼び出す必要があります。

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

EMF は決して Eclipse を必要としないため、ResourceおよびResourceSetクラスは Eclipse ワークスペース サブクラスと同じではありません。つまりIResource、ファイル システム上のファイルを変更しても、EMF リソースが再ロードされることはありません。

ファイルが変更されているときに Eclipse ワークスペースからデルタを受け取るXxxxEditorクラスをインスタンス化する EMF を見てください。IResourceChangeListener生成されたリスナーは、リソースを再ロードすることによってこれらのデルタを処理します。

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 に答える