Zusammenfassung: Ich entwickle eine persistente Java-Webanwendung, und ich muss sicherstellen, dass alle Ressourcen, die ich persistiere, global eindeutige Bezeichner haben, um Duplikate zu vermeiden.
Das Kleingedruckte:
- Ich verwende kein RDBMS, also habe ich auch keine ausgefallenen Sequenzgeneratoren (wie z. B. den von Oracle)
- Ich möchte, dass es schnell geht, vorzugsweise alles im Speicher - ich möchte nicht erst eine Datei öffnen und einen Wert inkrementieren müssen
- Es muss thread-sicher sein (ich gehe davon aus, dass nur eine JVM zur gleichen Zeit IDs generieren muss)
- Es muss Konsistenz zwischen den Instanzen der JVM bestehen. Wenn der Server heruntergefahren und wieder hochgefahren wird, sollte der ID-Generator nicht dieselben IDs neu generieren, die er in früheren Instanzierungen generiert hat (oder zumindest muss die Wahrscheinlichkeit sehr, sehr gering sein - ich rechne mit vielen Millionen vorhandener Ressourcen)
- Ich habe die Beispiele in dem Artikel EJB unique ID pattern gesehen. Sie werden für mich nicht funktionieren (ich möchte mich nicht ausschließlich auf System.currentTimeMillis() verlassen, da wir mehrere Ressourcen pro Millisekunde persistieren werden).
- Ich habe mir die Antworten angesehen, die in diese Frage . Ich frage mich, wie groß die Wahrscheinlichkeit ist, dass ich mit der Zeit eine doppelte ID erhalte. Ich bin fasziniert von dem Vorschlag, die java.util.UUID für eine UUID Aber auch hier gilt, dass die Wahrscheinlichkeit eines Duplikats verschwindend gering sein muss.
- Ich verwende JDK6