1

我一直在寻找解决方案,并在 SOF 中阅读了很多问题/答案,但没有找到任何我可以使用的东西。

我的问题如下:我需要在不同的机器上唯一地识别 EMF 元素。已知的最低级别超类是 org.eclipse.emf.common.notify.Notifier,因为元素可能是资源和/或模型元素。

Id 应该在运行时在不同机器上可重现(我可能必须在客户端和服务器中计算只有对 Java 对象的引用的 ID)。我无法访问源代码,无法修改模型(文件),而且并非所有模型元素都有 uuid。

由于 Id 应该可以在不同的机器上重现,我不能使用hashCode()(任何形式)。我考虑过使用 MD5 散列,但我不知道使用什么作为 MD5 散列的种子,这将使它成为唯一(在某种程度上)并且同时可重现

所有帮助将不胜感激!

4

1 回答 1

0

好吧,我找到了一个解决方案。我对 EObjects 和 Resources 使用不同的 ID:

  • 对于 EObject,我获取它们的片段 URI(它们在包含资源中的路径),将其设为字符串,并将其用作 MD5 哈希的种子。事实证明,结果fragmentURI().toString()看起来与 EMF 生成的 UUID 惊人地相似。:-)

  • 对于资源,我获取文件的内容(模型文件通常是 XMI/XML 文件)并计算这些内容的 MD5 哈希值。

解决方案有点重,特别是资源部分,但我通过最小化对 ID 生成算法的调用来弥补,所以对我来说没问题。它是独一无二的,并且可以跨机器重现,这正是我所需要的。

希望这对将来的某人有所帮助。

于 2013-07-12T16:49:08.073 回答