Gå til innhold

Generering av unik id for klient uten bruk av database sekvens


Anbefalte innlegg

Har skrevet en liten applikasjon i java som kun kjører i systray. Denne kobler seg opp 1 gang i timen til en web service og henter ut en "fakta" om Lars Monsen. ( F.eks : Lars Monsen kan selge skinnet før bjørnen er skutt )

Dette krever java 1.6 for å kjøre.

Endret av drool
Lenke til kommentar
Videoannonse
Annonse
En .exe-fil? Jeg kan laste ned kildekoden og se på den, men jeg laster ikke ned og kjører en .exe-fil. Det vil jeg anbefale at ingen andre gjør heller.

 

Ja, har wrappa en .jar med JSmooth til .exe. Kan laste opp .jar senere i dag.

Lenke til kommentar
En .exe-fil? Jeg kan laste ned kildekoden og se på den, men jeg laster ikke ned og kjører en .exe-fil. Det vil jeg anbefale at ingen andre gjør heller.
Ja, har wrappa en .jar med JSmooth til .exe. Kan laste opp .jar senere i dag.
Med kildekoden? Hvilke lisens ligger den under?
Lenke til kommentar
En .exe-fil? Jeg kan laste ned kildekoden og se på den, men jeg laster ikke ned og kjører en .exe-fil. Det vil jeg anbefale at ingen andre gjør heller.
Ja, har wrappa en .jar med JSmooth til .exe. Kan laste opp .jar senere i dag.
Med kildekoden? Hvilke lisens ligger den under?

Trenger ikke test. Fant ut av det.

Lenke til kommentar
En .exe-fil? Jeg kan laste ned kildekoden og se på den, men jeg laster ikke ned og kjører en .exe-fil. Det vil jeg anbefale at ingen andre gjør heller.
Ja, har wrappa en .jar med JSmooth til .exe. Kan laste opp .jar senere i dag.
Med kildekoden? Hvilke lisens ligger den under?

Trenger ikke test. Fant ut av det.

 

Det jeg ville få testa var at hver klient som kjørte hadde en unik id. Denne skal være unik selv om klienten stoppes og startes på nytt. Man kan jo selvsagt løse dette ved å la en database lage en sekvens, men har ikke lyst til å gjøre et ekstra kall mot servicen kun for dette.

Har løst dette på følgende måte :

public static long getUniqueClientID() {
	long uniqeClientID = 0;
	try {
		InetAddress address = InetAddress.getLocalHost();
		NetworkInterface ni = NetworkInterface.getByInetAddress(address);
		byte[] unreadableMacAddress = ni.getHardwareAddress();
		StringBuffer buffer = new StringBuffer();
		for ( int i = 0 ; i < unreadableMacAddress.length ; i ++ ) {
			buffer.append(Integer.toHexString(unreadableMacAddress[i]&0xFF));
		}
		log.debug("MacAddress to be hashed: " + buffer);
		uniqeClientID = (long)(buffer.toString().hashCode()&0xFFFFFFFFL);
		log.info("Uniqe clientID generated: " + uniqeClientID);
	} catch (SocketException e) {
		log.error("An error occured while generating uniqe id " + e.getMessage() );
		//Still want to return a "uniqe" number..
		uniqeClientID = (long)UUID.randomUUID().hashCode();
	} catch (UnknownHostException e) {
		log.error("An error occured while generating uniqe id " + e.getMessage() );
		//Still want to return a "uniqe" number..
		uniqeClientID = (long)UUID.randomUUID().hashCode();
	} catch ( Exception e ) {
		log.error( "An error occured while generating uniqe id " + e.getMessage() );
		//Still want to return a "uniqe" number..
		uniqeClientID = UUID.randomUUID().hashCode();
	}
	return uniqeClientID;
}

 

Men som har noen andre smarte måte å forsikre seg på at jeg får samme unike id for hver klient?

Endret av drool
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...