2011-12-30 8 views
2

物理的に分離された複数のデータベースのキーとして一意のIDを生成する必要があります。JBossで使用するUUID/GUIDジェネレータ

私はJBossを使用していますが、どのインプリメンテーション/ライブラリを使うのがいいのでしょうか?私はjava.util.UUIDがシンプルでおそらく上質であることを知っています。私はこれがJBossに行く方法であるかどうかを知りたいだけです。

ヒントこのコードを使用して呼び出すことができUUID generator in JBossがあるよう

答えて

2

はルックス:

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

はい、それも見つかりました。しかしこれはJBOSSに入るための推奨された方法ですか? – mostart

1

あなたがお勧めとはどういう意味ですか?

UUIDは標準です。 UUIDにはさまざまな種類があります(標準とも呼ばれます)。生成されたキーが標準に従う限り(他の場合は、動作している限り)、どのライブラリや実装を使用するかは問題ではありません。

私はUDKのJDK実装がかなり信頼できると思います。これはJava APIの一部ですが、単純ですが、使用しない理由はありません。実際、これはJBoss上で動作するEJB 3.0アプリケーションで使用しているものです。

JBoss ASが提供するUUIDジェネレータは、バージョン3.2で追加されました(別の回答のリンクに従って)。このジェネレータは、JBoss 3.2がリリースされたときに、JDKがJava 5で導入されたjava.util.UUIDクラスを提供しなかったためです。

0

Andre Rodriguesの回答が正しいです。

UUIDのバージョン(種類)について検討する必要があります。 Wikipedia pageは説明がうまくいきます。

java.util.UUID classは、バージョン3(名前ベース、メソッドnameUUIDFromBytes(byte[] name)経由)と4(完全ランダム、メソッドrandomUUID()経由)のUUIDのみを生成します。 Sun/Oracleは、「暗号的に強力な疑似乱数生成器」を提供していると主張しています。つまり、何十億という価値を創造しても、衝突の可能性はほとんどありません。

セキュリティ上の理由から、Javaでは、ネットワークインターフェイスのMACアドレスと現在の日付時刻を使用する元のバージョンは生成されません。理論的には、このバージョンはバージョン4よりも衝突が起こりにくいです。実際には衝突は事実上不可能です。それがあなたが望む種類のUUIDであれば、別のライブラリを呼び出して作成することができます。現在、ほとんどのオペレーティングシステムはuuidgenBSDとOS X)などのUUIDジェネレータにバンドルされています。次に、ビットまたは16進文字列をjava.util.UUIDにあるコンストラクタまたはファクトリメソッドのいずれかに渡します。