与JBoss一起使用的UUID / GUID生成器

时间:2011-12-30 07:46:18

标签: java jboss guid uuid

我想生成唯一的ID作为多个物理上分离的数据库的密钥。

我使用JBoss,我想知道哪种实现/库是可行的。我知道java.util.UUID会很简单,也许很好。我想知道这是否是JBoss的方法。

任何提示?

3 个答案:

答案 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。