diff options
Diffstat (limited to 'spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionIDGenerator.java')
-rw-r--r-- | spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionIDGenerator.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionIDGenerator.java b/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionIDGenerator.java new file mode 100644 index 000000000..6eb07defe --- /dev/null +++ b/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionIDGenerator.java @@ -0,0 +1,51 @@ +package at.gv.egovernment.moa.spss.server.transaction; + + +/** + * A generator for unique transaction IDs. + * + * <p>The transaction IDs are of the form "<base>-<counter>", where: + * <ul> + * <li><code>base</code> is initialized with the system time when this class is + * being loaded</li> + * <li><code>counter</code> is incremented sequentially on each call to + * <code>nextID()</code></li> + * </ul> + * </p> + * + * <p> Assuming that it is highly unlikely that MOA servers are started at + * exactly the same time instant, the mechanism provided by this class should + * guarantee unique transaction IDs across multiple restarts and/or instances of + * the server.</p> + * + * @author Patrick Peck + * @author Stefan Knirsch + */ +public class TransactionIDGenerator { + + /** Request sequence number. */ + private static long counter = 0; + /** The base value to which to append the sequence number. */ + private static String base = null; + + /** + * Set up the initial base value. + */ + static { + synchronized (TransactionIDGenerator.class) { + base = Long.toString(System.currentTimeMillis()); + } + } + + /** + * Returns the next transaction ID. + * + * @return The next transaction ID. + */ + public static synchronized String nextID() { + counter++; + + return (base + "-" + counter); + } + +} |