2010-02-26 3 views
1

JVM에서 객체의 객체 ID에 대한 질문이 있습니다. 즉, JVM1에서 생성 된 객체를 유지했다고 가정 해 봅시다. 이제 JVM2에서 동일한 객체를 사용하려고합니다.jvms에서 객체의 객체 ID?

  1. 어떻게 그렇게 할 수 있습니까?
  2. 개체의 개체 ID가 JVM에서 동일합니까?
  3. 위의 질문에 예인 경우 JVM2에 이미 objectID가 동일한 객체가있는 경우 어떻게됩니까?

감사합니다.

답변

3

오브젝트는 사용자가 비 직렬화 할 때까지 JVM2에 존재하지 않습니다. Java에는 "범용 객체 ID"개념이 없습니다. 객체에 ID가 필요한 경우 직접 추가해야합니다. 개체에 UUID 필드를 추가 할 수 있습니다. 그런 다음 중복을 발견 할 수 있도록 일종의 캐시를 유지하려고합니다.

정말 필요한가요? 더 큰 그림을 다시보고 다시 디자인 할 가치가있을 수 있습니다.

+0

실제로 우리는 다중 노드 구현이 있습니다. 그리고 모든 노드에서 객체는 동일한 객체 ID를 가져야합니다. 그래서 이것은 요구 사항입니다. – GuruKulki

+1

Object ID는 응용 프로그램에 특정한 것처럼 들리지만, 맞습니까? –

+0

@ gurukulki : 개체에 아직 고유 한 형식의 ID가 없습니까? 어떤 자연 키가 있다면 다른 곳에서 사용하는 것이어야합니다 ... –

2

체크 아웃 직렬화 here 또는 선택적으로 사용할 수있는 RMI - check out this link

난 당신이 참조를 의미하는 경우, 당신은 더 toString과 오브젝트를 인쇄 할 때 인쇄 얻을, 당신은 객체 ID가 무엇을 의미하는지 정말 모르겠어요 그런 다음 이것은 객체 ID가 아니며 이것은 메모리 주소 참조이며 각 JVM마다 다르며 동일한 프로그램의 다른 호출마다 다릅니다.

2

개체에 UUID를 추가하여 고유 한 ID를 만들 수 있습니다.

+0

(새로운 것들에 +1!) 전에 보지 못했지만 그것을 사용 했습니까? –

+0

@James B 지금까지는이 기능이 필요하지 않았지만 일반적으로 노드 또는 IP 주소의 고유 ID (응용 프로그램 구성에서)를 사용합니다. – stacker

+0

나는 그것이 편리하다고 생각한다. 나는 항상 밀리 세형의 현재 시간과 객체의 일부 고유 한 문자열 해쉬를 조합하여 사용했다. 그러나 이것은 항상 약간의 실수로 느껴질 수있는 것을 구할 수 있었다. –

관련 문제