2010-02-26 72 views
1

我對跨JVM的對象的對象ID有疑問。即說假設我已經堅持一個在JVM1上創建的對象,現在我想在JVM2上使用同一個對象。跨jvms的對象的對象ID?

  1. 那麼該怎麼做。
  2. 兩個JVM上的對象的對象ID是否相同?
  3. 如果對於上述問題的答案是肯定的,那麼如果JVM2已經有一個ObjectID與持久化ObjectID相同的對象,情況如何。

謝謝。

回答

3

該對象在JVM2上不存在,直到您將其反序列化爲止。在Java中沒有「通用對象ID」的概念 - 如果您需要對象的ID,則必須自己添加它。你可以爲你的對象添加一個UUID字段;那麼你會想要維護一些緩存來讓你發現重複。

你確定你需要所有這些嗎?值得再看一下更大的圖片和重新設計。

+0

其實我們有一個多節點實現。在所有節點中,一個對象應該具有相同的對象ID。所以這是要求。 – GuruKulki 2010-02-26 11:46:19

+1

對象ID聽起來像是特定於您的應用程序的東西,那是對的嗎? – 2010-02-26 11:47:06

+0

@gurukulki:你的對象是不是已經有自己的身份形式了?如果你有一些自然的鑰匙,那應該很可能是你在其他地方使用的...... – 2010-02-26 11:47:27

2

退房系列化here或者你也可以使用RMI - check out this link

我真的不知道你的對象ID是什麼意思,如果你的意思是你引用得到打印出來,當你打印出一個對象沒有的toString方法,那麼這不是一個對象ID,這是內存地址引用,並且在每個JVM上會不同,並且在同一個程序的不同調用上會有所不同。

2

你可以添加一個UUID到你的對象來創建一個唯一的ID。

+0

(對於新的東西+1)我以前沒有見過,你有沒有使用它,如果是的話,在哪裏? – 2010-02-26 11:51:50

+0

@James B直到現在我不需要這個,我通常使用一個節點的唯一Id(來自應用程序配置)或它的IP地址。 – stacker 2010-02-26 12:02:28

+0

我認爲這很方便,我總是使用millis中的當前時間和來自對象的一些半獨特字符串散列的組合,但這可以讓我做一些總是感覺有點兒亂七八糟的事情 - 謝謝! – 2010-02-26 12:07:19