2013-07-11 1 views
1

저는 해결책을 찾기 위해 많은 노력을 기울였으며 SOF에서 많은 질문/답변을 읽었지 만 사용할 수있는 것을 찾지 못했습니다.Java Object (Eclipe EMF의 자원 및 모델 elments)에 대한 고유하고 재현 가능한 식별자

내 문제는 다음과 같습니다. 다른 기계에서 EMF 요소를 고유하게 식별해야합니다. 가장 낮은 레벨의 알려진 수퍼 클래스는 org.eclipse.emf.common.notify.Notifier가 될 수 있는데, 이는 요소가 자원 및/또는 모델 요소 일 수 있기 때문입니다.

ID는 런타임마다 다른 시스템에서 재현 가능해야합니다 (Java 객체에 대한 참조 만 갖는 클라이언트와 서버 모두에서 ID를 계산해야 할 수도 있음). 소스 코드에 액세스 할 수 없으며 모델 (파일)을 수정할 수없고 모든 모델 요소에 uuids가없는 것은 아닙니다.

ID가 다른 컴퓨터에서 재생성 될 수 있으므로 hashCode() (모든 형식)을 사용할 수 없습니다. MD5 해시 사용을 고려했지만 MD5 해시의 시드로 사용할 내용을 알아낼 수 없으므로 은 고유 한 (어느 정도까지)이고 을 동시에 재생할 수 있습니다.

모든 도움을 주시면 대단히 감사하겠습니다.

답변

0

음, 나는 해결책을 찾았습니다. 나는 EObjects과 자원에 대해 서로 다른 ID 년대를 사용

EObjects를 들어
  • , 나는 그들의 단편 URI (포함하는 자원 내 자신의 경로를) 얻을, 그것을 문자열을 확인하고 MD5 해시의 씨앗으로 것을 사용 . fragmentURI().toString()의 결과는 EMF가 UUID로 생성하는 것과 놀랍게 비슷하게 보입니다. :-)

  • 리소스의 경우 파일의 내용 (모델 파일은 일반적으로 XMI/XML 파일 임)을 받고 MD5 해시를 계산합니다.

이 솔루션은 조금 무거운, 특히 자원 부분이지만, 나는 ID의 생성 알고리즘에 대한 호출을 최소화하여 만들어, 그래서 나를 위해 OK입니다. 그것이 무엇인지는 기계마다 독특하고 재현 가능하며, 필자가 필요로하는 것입니다.

앞으로 도움이되기를 바랍니다.