2011-12-30 79 views
2

我想生成唯一的ID作爲多個物理上分離的數據庫的關鍵字。要與JBoss一起使用的UUID/GUID生成器

我使用JBoss,我想知道哪個實現/庫是要走的路。我知道java.util.UUID會很簡單,也許很好。我只想知道這是否是JBoss的方式。

任何提示?

回答

2

貌似有一個UUID generator in JBoss可使用此代碼調用:

InitialContext ctx = new InitialContext(); 
    KeyGeneratorFactory kgf = (KeyGeneratorFactory) ctx.lookup("UUIDKeyGeneratorFactory"); 
    KeyGenerator kg = kgf.getKeyGenerator(); 
    Object uuid = kg.generateKey(); 
+0

是的,也發現了一個。但是這是推薦使用JBOSS的方法嗎? – mostart 2011-12-30 08:09:19

1

你是什麼意思的建議?

UUID是標準。有不同種類的UUID(也被定義爲標準)。只要生成的密鑰符合標準(只要其工作正常),則使用哪個庫或實現無關緊要。

我認爲UUID的JDK實現非常可靠。它是Java API的一部分,很簡單,我沒有看到不使用它的理由。實際上,這就是我在EJB 3.0應用程序(在JBoss上運行)中所使用的。

JBoss AS提供的UUID生成器是在3.2版本中添加的(根據另一個答案中的鏈接)。包括這個生成器可能是因爲當JBoss 3.2發佈時,JDK沒有提供java.util.UUID類,這是在Java 5中引入的。

0

Andre Rodrigues的答案是正確的。

您應該研究UUID的版本(類型)。 Wikipedia page做了很好的解釋。

java.util.UUID class僅生成版本3(基於名稱,通過方法nameUUIDFromBytes(byte[] name))和4(完全隨機,通過方法randomUUID())UUID。 Sun/Oracle聲稱他們提供了一個「密碼強的僞隨機數生成器」。這意味着即使創造了數十億或數萬億的價值,您也不應該有任何真正的碰撞機會。

出於安全原因,Java不會生成使用您的網絡接口的MAC地址和當前日期時間的原始版本。理論上講,這個版本碰撞的可能性比第4版更小。事實上碰撞實際上是不可能的。如果這是你想要的那種UUID,你可以通過調用另一個庫來創建一個UUID。現在,大多數操作系統都與UUID生成器捆綁在一起,如uuidgenBSD和OS X.然後將這些位或十六進制字符串傳遞給java.util.UUID上的構造函數或工廠方法之一。

相關問題