Newsgroup: it.comp.java
Titolo: generare id univoco

Ciao ragazzi...
ho piccolo problema... devo creare un id univoco da un batch java,
considerando che il batch gira su due macchine diverse che lavorano con
lo stesso db.
Avevo pensato a System.currentTimeMillis(), questo andava bene se il
processo girava in una sola macchina, cosa posso utilizzare...
grazie in anticipo.

 lo stesso db.
Visto che usi un (unico) db perché non sfrutti una sequenza del db stesso?
pole
-- 
ammentos - a lightweight persistence framework for JDK5
http://ammentos.biobytes.it
Flash tutorial: 
http://ammentos.biobytes.it/quickstart/quickstart.htm

ci avoven pensato ad una sequenza del db stesso. Ma considerato che uso
mysql non ho a disposizione l'oggetto sequencer, e quindi in mysql
dovrei compensare con un campo contatore che leggo di volta in volta.
Ma che succede se ho due letture nello stesso instante... questa
ipotesi mi ha fatto scartare il campo contatore. Ho ragionato giusto?
Avete suggerimenti?
Grazie per le risposte...

 dovrei compensare con un campo contatore che leggo di volta in volta.
noooooo!
Crei una tabella con un campo contatore.
Poi, crei una stored procedure atomica che legge questo valore, lo
incrementa, lo scrive sul db e lo restituisce come risultato.
Campi autonic?? Bleah! ;-P
AS

 ha scritto nel messaggio 
news:1139226546....@f14g2000cwb.googlegroups.com...

passi un id diverso all'avvio di java a seconda della macchina che poi 
concateni/sommi a System.currentTimeMillis()   es:   java -Dmioid=1 
miaapplicazionejava    ...questo id lo recuperi con 
system.getproperties(mioid)
Ciao
-- 
Esistono 10 tipi di persone al mondo, quelle che conoscono il binario e 
quelle che non lo conoscono. 

 Campi autonic?? Bleah! ;-P
Interessante... potreste darmi piu informazioni su questa soluzione?
Non sono pratico con le stored procedure...
Grazie..

E domani, a questa esatta ora, millisecondi compresi, cosa succedera?
E cosa succede se devi fare il merge di dati presi da diversi db?
Non abbiamo necessita' di ausilii per introdurre instabilità nelle
applicazioni, ci riusciamo gia da soli....
Se ti serve una primary key per un database, conviene che sia lo stesso
db a fornire allo sviluppatore uno strumento per calcolarle.
Se il db non supporta cose tipo sequence (oracle) o generators
(firebird/interbase) allora ti credi una tabella di contatori come
suggerivo.
Tra () questo sistema è in genere utilizzato per gestire contatori
come fatture e ddt..
Cosa importante, conviene sempre usare il tipo nativo del processore
(int a 32 bit) che oltre ad essere trattato senza ulterori elaborazioni
dal processore ha il vantaggio di avere un range vasto di valori e di
occupare solo 4 bytes.
Alcuni credono sia una buona idea usare un guid...
Ma un guid è alfanumerico e lungo, oltre a non garantire al 100% la
possibilità di duplicazione, cisto che in fondo è una specie di hash.
Poi, in una relazione master details (tetstate e righe delle fatture, x
esempio...), se ad ogni record di testata corrispondono almeno 2 record
di dettaglio ti porti dietro 32*3caratteri solo per gestire la
integrita referenziale.
Se poi i records iniziano a essere tantini sai che casino....
AS

Una stored procedure è un blocco di codice integrato nel database.
Ogni db ha un proprio "dialetto" per la loro scrittura.
Si passa da dialetti scarni come quello del vecchio interbase a
dialetti complessi come papa' Oracle e Sybase.
Da una stored procedure puoi eseguire query, ciclare sull'insieme di
records restituito da una select e molto altro.
Una delle limitazioni imposte da alcuni db riguarda l'impossibilità di
creare o distruggere oggetti non temporanei sul db stesso.
Purtroppo su MySql non so aiutarti, visto che non l'ho mai usato.
E poi finiremmo OT.
Cerca sul sito di MySql e/o nella documentazione...
Quello che deve essere ASSOLUTAMENTE GARANTITO e' 'atomicita' della
esecuzione di questa sotred procedure, altrimenti succede un bel
casino.
BaiBai
AS

applicazioni, ci riusciamo gia da soli....
ok per sequence / trigger / procedure (db permettendo) per l'univocità della 
chiave del db, ma per debug o controlli ritengo che possa essere un ottima 
idea sapere anche a che data/ora e su che computer è girata l'applicazione