2010-02-26 68 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