From ece7d18cf35374bf4e26d041799cda8f791c89f8 Mon Sep 17 00:00:00 2001 From: gregor Date: Mon, 7 Jul 2003 10:58:37 +0000 Subject: Initial commit git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@2 d688527b-c9ab-4aba-bd8d-4036d912da1d --- .../server/transaction/TransactionContext.java | 90 ++++++++++++++++++++++ .../transaction/TransactionContextManager.java | 62 +++++++++++++++ .../server/transaction/TransactionIDGenerator.java | 51 ++++++++++++ 3 files changed, 203 insertions(+) create mode 100644 spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionContext.java create mode 100644 spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionContextManager.java create mode 100644 spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionIDGenerator.java (limited to 'spss.server/src/at/gv/egovernment/moa/spss/server/transaction') diff --git a/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionContext.java b/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionContext.java new file mode 100644 index 000000000..407dbd4e9 --- /dev/null +++ b/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionContext.java @@ -0,0 +1,90 @@ +package at.gv.egovernment.moa.spss.server.transaction; + +import java.security.cert.X509Certificate; + +import at.gv.egovernment.moa.spss.server.config.ConfigurationProvider; + +/** + * Contains information about the current request. + * + * @author Stefan Knirsch + * @author Patrick Peck + */ +public class TransactionContext { + + /** The client certificate. */ + private X509Certificate[] clientCertificate = null; + /** The transaction ID. */ + private String transactionID = null; + /** The name of the request. */ + private String requestName = null; + /** The configuration to use throughout the request. */ + private ConfigurationProvider configuration = null; + + /** + * Create a TransactionContext object. + * + * @param transactionID A unique ID for this TransactionContext. + * @param clientCertificate The client certificate chain. + * @param configuration The MOA configuration to use for this transaction. + */ + public TransactionContext( + String transactionID, + X509Certificate[] clientCertificate, + ConfigurationProvider configuration) { + + this.transactionID = transactionID; + this.clientCertificate = clientCertificate; + this.configuration = configuration; + } + + /** + * Returns the client certificate. + * + * @return The client certificate chain, if SSL client authentication has been + * configured in the web server and has been used by the client. The 0th + * element of the array contains the client certificate. null + * otherwise. + */ + public X509Certificate[] getClientCertificate() { + return clientCertificate; + } + + /** + * Returns the unique transaction ID. + * + * @return The transaction ID. + */ + public String getTransactionID() { + return transactionID; + } + + /** + * Returns the name of the request. + * + * @return The name of the request. + */ + public String getRequestName() { + return requestName; + } + + /** + * Sets the name of the request. + * + * @param requestName The request name to set. + */ + public void setRequestName(String requestName) { + this.requestName = requestName; + } + + /** + * Returns the ConfigurationProvider associated with this + * transaction. + * + * @return The ConfigurationProvider associated with this transaction. + */ + public ConfigurationProvider getConfiguration() { + return configuration; + } + +} diff --git a/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionContextManager.java b/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionContextManager.java new file mode 100644 index 000000000..13127c3ae --- /dev/null +++ b/spss.server/src/at/gv/egovernment/moa/spss/server/transaction/TransactionContextManager.java @@ -0,0 +1,62 @@ +package at.gv.egovernment.moa.spss.server.transaction; + +/** + * Provides each thread with an instance of TransactionContext. + * + * The single instance of the TransactionContextManager should be + * used to access contextual information for each web service transaction, e.g. + * the transaction ID, MOA configuration, client certificate, etc. + * + * @author Stefan Knirsch + * @author Patrick Peck + */ +public class TransactionContextManager { + + /** The single instance of TransactionContextManager */ + private static TransactionContextManager instance = null; + + /** Contains a single TransactionContext for each thread. */ + private ThreadLocal context = null; + + /** + * Get the single instance of TransactionContextManager. + * + * @return The single instanc of TransactionContextManager. + */ + public static synchronized TransactionContextManager getInstance() { + if (instance == null) { + instance = new TransactionContextManager(); + } + return instance; + } + + /** + * Creates a new TransactionContextManager. + * + * Protected to disallow direct instantiation. + */ + protected TransactionContextManager() { + context = new ThreadLocal(); + } + + /** + * Set the TransactionContext for the current thread. + * + * @param txContext The TransactionContext for this thread. + */ + public void setTransactionContext(TransactionContext txContext) { + context.set(txContext); + } + + /** + * Get the TransactionContext for the current thread. + * + * @return The TransactionContext for the current thread or + * null, if none has been set (or if this method is being invoked + * outside the bounds of a transaction). + */ + public TransactionContext getTransactionContext() { + return (TransactionContext) context.get(); + } + +} 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. + * + *

The transaction IDs are of the form "-", where: + *

+ *

+ * + *

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.

+ * + * @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); + } + +} -- cgit v1.2.3