Gerando um identificador global exclusivo em Java

Resumo: Estou desenvolvendo um aplicativo da web Java persistente e preciso ter certeza de que todos os recursos que eu persistir tenham identificadores globais exclusivos para evitar duplicatas.

A cópia fina:

Eu não estou usando um RDBMS, então eu não tenho nenhum gerador de seqüência de fantasia (como o fornecido pela Oracle)Eu gostaria que fosse rápido, de preferência tudo na memória - Eu prefiro não ter que abrir um arquivo e incrementar algum valorEle precisa ser thread-safe (estou prevendo que apenas uma JVM por vez precisará gerar IDs)Precisa haver consistência nas instâncias da JVM. Se o servidor for desligado e inicializado, o gerador de ID não deve gerar novamente os mesmos IDs gerados nas instanciações anteriores (ou pelo menos a chance tem que ser muito, muito pequena - eu antecipo muitos milhões de recursos pré-existentes)Eu vi os exemplos no artigo padrão de ID exclusivo do EJB. Eles não funcionarão para mim (prefiro não confiar somente em System.currentTimeMillis () porque estaremos persistindo em vários recursos por milissegundo).Eu olhei para as respostas propostas emessa questão. Minha preocupação sobre eles é: qual é a chance de obter uma ID duplicada ao longo do tempo? Estou intrigado com a sugestão de usarjava.util.UUID paraUUIDmas, novamente, as chances de uma duplicata precisam ser infinitesimalmente pequenas.Estou usando o JDK6

questionAnswers(6)

yourAnswerToTheQuestion