Génération d'un identifiant global unique en Java

Résumé: je suis l'élaboration d'une persistante d'applications web Java, et j'ai besoin de faire en sorte que toutes les ressources je persiste possède un identificateur unique pour éviter les doublons.

L'Amende Impression:

  1. Je ne suis pas à l'aide d'un SGBDR, donc je n'ai pas toute la fantaisie de la séquence de générateurs (tel que celui fourni par Oracle)
  2. J'aimerais qu'il soit rapide, de préférence dans la mémoire - je préfère ne pas avoir à ouvrir un fichier et l'incrément de la valeur
  3. Il doit être thread-safe (j'attends qu'une seule JVM au moment aurez besoin pour générer des Id)
  4. Il doit y avoir cohérence entre les instanciations de la JVM. Si le serveur s'arrête et démarre, l'ID du générateur ne doit pas re-générer le même Id qu'elle a généré dans les précédents instanciations (ou au moins la chance doit être vraiment, vraiment slim - je anticiper de nombreux, des millions de presisted ressources)
  5. J'ai vu des exemples dans les EJB ID unique modèle de l'article. Ils ne fonctionnent pas pour moi (je préfère ne pas compter uniquement sur le Système.currentTimeMillis() parce que nous allons la persistance de plusieurs ressources par ordre de la milliseconde).
  6. J'ai regardé les réponses proposées dans cette question. Mon inquiétude à son sujet, quelle est la chance que je vais obtenir un ID en double fil du temps? Je suis intrigué par la suggestion d'utiliser java.util.UUID pour un UUIDmais encore une fois, les chances d'un duplicata doivent être infime.
  7. Je suis en utilisant le JDK6

source d'informationauteur Julie