我对跨JVM的对象的对象ID有疑问。即说假设我已经坚持一个在JVM1上创建的对象,现在我想在JVM2上使用同一个对象。跨jvms的对象的对象ID?
- 那么该怎么做。
- 两个JVM上的对象的对象ID是否相同?
- 如果对于上述问题的答案是肯定的,那么如果JVM2已经有一个ObjectID与持久化ObjectID相同的对象,情况如何。
谢谢。
我对跨JVM的对象的对象ID有疑问。即说假设我已经坚持一个在JVM1上创建的对象,现在我想在JVM2上使用同一个对象。跨jvms的对象的对象ID?
谢谢。
该对象在JVM2上不存在,直到您将其反序列化为止。在Java中没有“通用对象ID”的概念 - 如果您需要对象的ID,则必须自己添加它。你可以为你的对象添加一个UUID字段;那么你会想要维护一些缓存来让你发现重复。
你确定你需要所有这些吗?值得再看一下更大的图片和重新设计。
退房系列化here或者你也可以使用RMI - check out this link
我真的不知道你的对象ID是什么意思,如果你的意思是你引用得到打印出来,当你打印出一个对象没有的toString方法,那么这不是一个对象ID,这是内存地址引用,并且在每个JVM上会不同,并且在同一个程序的不同调用上会有所不同。
你可以添加一个UUID到你的对象来创建一个唯一的ID。
UUID UUID = UUID.randomUUID();
(对于新的东西+1)我以前没有见过,你有没有使用它,如果是的话,在哪里? – 2010-02-26 11:51:50
@James B直到现在我不需要这个,我通常使用一个节点的唯一Id(来自应用程序配置)或它的IP地址。 – stacker 2010-02-26 12:02:28
我认为这很方便,我总是使用millis中的当前时间和来自对象的一些半独特字符串散列的组合,但这可以让我做一些总是感觉有点儿乱七八糟的事情 - 谢谢! – 2010-02-26 12:07:19
其实我们有一个多节点实现。在所有节点中,一个对象应该具有相同的对象ID。所以这是要求。 – GuruKulki 2010-02-26 11:46:19
对象ID听起来像是特定于您的应用程序的东西,那是对的吗? – 2010-02-26 11:47:06
@gurukulki:你的对象是不是已经有自己的身份形式了?如果你有一些自然的钥匙,那应该很可能是你在其他地方使用的...... – 2010-02-26 11:47:27