Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 
Search the JavaFAQ.nu
1000 Java Tips ebook

1000 Java Tips - Click here for the high resolution copy!1000 Java Tips - Click here for the high resolution copy!

Java Screensaver, take it here

Free "1000 Java Tips" eBook is here! It is huge collection of big and small Java programming articles and tips. Please take your copy here.

Take your copy of free "Java Technology Screensaver"!.

Easy Learn Java: Programming Articles, Examples and Tips - Page 491


Previous 1060 Stories (530 Pages, 2 Per Page) Next

How to make 32 byte UUID - Better Than java.RMI.server.UID

Go to all tips in Java Code Examples

Improve the UUID (java.RMI.server.UID) by this excellent solution, code follows...

Personally, I do not like the java.RMI.server.UID solution, because the String representation produces negative numbers.. and it does not appear to be a straight forward operation to extract the values and reformat.

I DO like the proposed design from EJB Design Patterns book, but I have a different implementation that I believe solves the 50-day cycle problem identified by Thomas Paré, where chopping only the significant 8 bytes from the result of CurrentTimeMillis() produces about 50 days worth of unique values. A better approach would be to keep all significant 12 bytes of the CurrentTimeMillis() and keep only 4 bytes from the SecureRandom() function (see below):


  1. (0 - 7) IPAddress as HEX - 8 bytes
  2. (8 - 19) CurrentTimeMillis() as HEX - Display all 12 bytes
  3. (20 - 23) SecureRandom() as HEX - Keep only 4 significant bytes. Since this is "random" it doesn't really matter how many bytes you keep or eliminate
  4. (24 - 31) System.identityHashCode as Hex - 8 bytes

CODE SNIPPET:

Code:


import org.apache.log4j.Category;

import java.net.InetAddress;
import java.security.SecureRandom;

public class UID {
    static Category m_log = Category.getInstance(UID.class.getName());

    public UID() {
    }

    public String getUID() {
        String strRetVal = "";
        String strTemp = "";
        try {
            // Get IPAddress Segment
            InetAddress addr = InetAddress.getLocalHost();

            byte[] ipaddr = addr.getAddress();
            for (int i = 0; i < ipaddr.length; i++) {
                Byte b = new Byte(ipaddr[i]);

                strTemp = Integer.toHexString(b.intValue() & 0x000000ff);
                while (strTemp.length() < 2) {
                    strTemp = '0' + strTemp;
                }
                strRetVal += strTemp;
            }

            strRetVal += ':';

            //Get CurrentTimeMillis() segment
            strTemp = Long.toHexString(System.currentTimeMillis());
            while (strTemp.length() < 12) {
                strTemp = '0' + strTemp;
            }
            strRetVal += strTemp + ':';

            //Get Random Segment
            SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");

            strTemp = Integer.toHexString(prng.nextInt());
            while (strTemp.length() < 8) {
                strTemp = '0' + strTemp;
            }

            strRetVal += strTemp.substring(4) + ':';

            //Get IdentityHash() segment
            strTemp = Long.toHexString(System.identityHashCode((Object) this));
            while (strTemp.length() < 8) {
                strTemp = '0' + strTemp;
            }
            strRetVal += strTemp;

        }
        catch (java.net.UnknownHostException ex) {
            m_log.error("Unknown Host Exception Caught: " + ex.getMessage());
        }
        catch (java.security.NoSuchAlgorithmException ex) {
            m_log.error("No Such Algorithm Exception Caught: " + ex.getMessage());
        }

        return strRetVal.toUpperCase();
    }

    public static void main(String[] args) throws Exception {
        for (int i = 0; i < 10; i++) {
            long lngStart = System.currentTimeMillis();
            UID objUID = new UID();

            m_log.info(objUID.getUID());
            m_log.debug("Elapsed time: " + (System.currentTimeMillis() - lngStart));
        }
    }
}


 

The performance of this function appears pretty good - operating between 0 and 10ms.

P. S. by alex: This very valuable tip was submitted October 19, 2006. Unfortunately I was extremely occupied during this autumn and had tons of submissions to my sites. This real gold tip was buried under hundreds of spam messages (many sites get it), but finally was found and I publish it today!


3282 bytes more | comments? | Printer Friendly Page  Send to a Friend | Score: 0
Posted by Anonymous on Wednesday, January 17, 2007 (06:31:45) (7958 reads)

Easy fix for long timeouts in Java Sockets and RMI connections

Go to all tips in Networking

Have your Java sockets or RMI connection troubles with long timeouts when you try to connect to remote host which is probably was shut down?

Very good article about problems with Java sockets and RMI connections, long timeouts and example of working code (to fix timeout problem) is published in our "News" section here.



comments? | Printer Friendly Page  Send to a Friend | Score: 0
Posted by jalex on Wednesday, January 17, 2007 (06:08:29) (2576 reads)

Previous 1060 Stories (530 Pages, 2 Per Page) Next

530| 529| 528| 527| 526| 525| 524| 523| 522| 521| 520| 519| 518| 517| 516| 515| 514| 513| 512| 511| 510| 509| 508| 507| 506| 505| 504| 503| 502| 501| 500| 499| 498| 497| 496| 495| 494| 493| 492|
491
| 490| 489| 488| 487| 486| 485| 484| 483| 482| 481| 480| 479| 478| 477| 476| 475| 474| 473| 472| 471| 470| 469| 468| 467| 466| 465| 464| 463| 462| 461| 460| 459| 458| 457| 456| 455| 454| 453| 452| 451| 450| 449| 448| 447| 446| 445| 444| 443| 442| 441| 440| 439| 438| 437| 436| 435| 434| 433| 432| 431| 430| 429| 428| 427| 426| 425| 424| 423| 422| 421| 420| 419| 418| 417| 416| 415| 414| 413| 412| 411| 410| 409| 408| 407| 406| 405| 404| 403| 402| 401| 400| 399| 398| 397| 396| 395| 394| 393| 392| 391| 390| 389| 388| 387| 386| 385| 384| 383| 382| 381| 380| 379| 378| 377| 376| 375| 374| 373| 372| 371| 370| 369| 368| 367| 366| 365| 364| 363| 362| 361| 360| 359| 358| 357| 356| 355| 354| 353| 352| 351| 350| 349| 348| 347| 346| 345| 344| 343| 342| 341| 340| 339| 338| 337| 336| 335| 334| 333| 332| 331| 330| 329| 328| 327| 326| 325| 324| 323| 322| 321| 320| 319| 318| 317| 316| 315| 314| 313| 312| 311| 310| 309| 308| 307| 306| 305| 304| 303| 302| 301| 300| 299| 298| 297| 296| 295| 294| 293| 292| 291| 290| 289| 288| 287| 286| 285| 284| 283| 282| 281| 280| 279| 278| 277| 276| 275| 274| 273| 272| 271| 270| 269| 268| 267| 266| 265| 264| 263| 262| 261| 260| 259| 258| 257| 256| 255| 254| 253| 252| 251| 250| 249| 248| 247| 246| 245| 244| 243| 242| 241| 240| 239| 238| 237| 236| 235| 234| 233| 232| 231| 230| 229| 228| 227| 226| 225| 224| 223| 222| 221| 220| 219| 218| 217| 216| 215| 214| 213| 212| 211| 210| 209| 208| 207| 206| 205| 204| 203| 202| 201| 200| 199| 198| 197| 196| 195| 194| 193| 192| 191| 190| 189| 188| 187| 186| 185| 184| 183| 182| 181| 180| 179| 178| 177| 176| 175| 174| 173| 172| 171| 170| 169| 168| 167| 166| 165| 164| 163| 162| 161| 160| 159| 158| 157| 156| 155| 154| 153| 152| 151| 150| 149| 148| 147| 146| 145| 144| 143| 142| 141| 140| 139| 138| 137| 136| 135| 134| 133| 132| 131| 130| 129| 128| 127| 126| 125| 124| 123| 122| 121| 120| 119| 118| 117| 116| 115| 114| 113| 112| 111| 110| 109| 108| 107| 106| 105| 104| 103| 102| 101| 100| 99| 98| 97| 96| 95| 94| 93| 92| 91| 90| 89| 88| 87| 86| 85| 84| 83| 82| 81| 80| 79| 78| 77| 76| 75| 74| 73| 72| 71| 70| 69| 68| 67| 66| 65| 64| 63| 62| 61| 60| 59| 58| 57| 56| 55| 54| 53| 52| 51| 50| 49| 48| 47| 46| 45| 44| 43| 42| 41| 40| 39| 38| 37| 36| 35| 34| 33| 32| 31| 30| 29| 28| 27| 26| 25| 24| 23| 22| 21| 20| 19| 18| 17| 16| 15| 14| 13| 12| 11| 10| 9| 8| 7| 6| 5| 4| 3| 2| 1|


Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy