我想生成唯一的ID作为多个物理上分离的数据库的密钥。
我使用JBoss,我想知道哪种实现/库是可行的。我知道java.util.UUID
会很简单,也许很好。我想知道这是否是JBoss的方法。
任何提示?
答案 0 :(得分:2)
看起来可以使用此代码调用UUID generator in JBoss:
InitialContext ctx = new InitialContext();
KeyGeneratorFactory kgf = (KeyGeneratorFactory) ctx.lookup("UUIDKeyGeneratorFactory");
KeyGenerator kg = kgf.getKeyGenerator();
Object uuid = kg.generateKey();
答案 1 :(得分:1)
推荐的是什么意思?
UUID是一个标准。有不同种类的UUID(也被定义为标准)。只要生成的密钥遵循标准(在其他情况下,只要它有效),使用哪个库或实现并不重要。
我认为UUID的JDK实现非常可靠。它是Java API的一部分,很简单,我没有理由不使用它。实际上,这就是我在EJB 3.0应用程序(在JBoss上运行)中使用的。
JBoss AS提供的UUID生成器在版本3.2中添加(根据另一个答案中的链接)。包含这个生成器可能是因为当JBoss 3.2发布时,JDK没有提供Java {5>中引入的java.util.UUID
类。
答案 2 :(得分:0)
安德烈罗德里格斯的回答是正确的。
您应该研究UUID的版本(类型)。 Wikipedia page很好地解释了。
java.util.UUID class仅生成版本3(基于名称,通过方法nameUUIDFromBytes(byte[] name)
)和4(完全随机,通过方法randomUUID()
)UUID。 Sun / Oracle声称他们提供了“加密强伪随机数生成器”。这意味着即使创造了数十亿或数万亿的价值,你也不应该有任何真正的碰撞机会。
出于安全原因,Java不会生成使用您的网络接口的MAC地址加上当前日期时间的原始版本。从理论上讲,这个版本比第4版更容易发生碰撞。事实上,碰撞几乎是不可能的。如果这是您想要的那种UUID,您可以通过调用另一个库来创建一个。现在大多数操作系统都捆绑了一个UUID生成器,例如uuidgen和OS X中的BSD。然后将位或十六进制字符串传递给java.util上的构造函数或工厂方法之一。 UUID。