001: /*
002: * CoadunationLib: The coaduntion implementation library.
003: * Copyright (C) 2006 Rift IT Contracting
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
018: *
019: * TransactionDirector.java
020: *
021: * This object is responsible for setting up the transaction manager and for
022: * supplying access to the transaction manger
023: */
024:
025: // package path
026: package com.rift.coad.lib.transaction;
027:
028: // java imports
029: import javax.transaction.UserTransaction;
030: import javax.transaction.TransactionManager;
031:
032: // log 4 j imports
033: import org.apache.log4j.Logger;
034:
035: // JOTM imports
036: import org.objectweb.jotm.Jotm;
037:
038: // coadunation imports
039: import com.rift.coad.lib.naming.ContextManager;
040:
041: /**
042: * This object is responsible for setting up the transaction manager and for
043: * supplying access to the transaction manger. It sets up the JOTM transaction
044: * manager or Jonas Transaction manager.
045: *
046: * @author Brett Chaldecott
047: */
048: public class TransactionDirector {
049:
050: // the user transaction context
051: private final static String TRANSACTION_CONTEXT_BASE = "java:comp/";
052: private final static String USER_TRANSACTION_CONTEXT_BINDING = "UserTransaction";
053: private final static String TRANSACTION_MANAGER_CONTEXT_BINDING = "TransactionManager";
054:
055: // logger manager reference
056: private Logger log = Logger.getLogger(TransactionDirector.class
057: .getName());
058:
059: // private member variables
060: private static TransactionDirector singleton = null;
061: private Jotm jotm = null;
062: private UserTransaction userTransaction = null;
063: private TransactionManager transactionManager = null;
064:
065: /**
066: * Creates a new instance of TransactionDirector
067: */
068: public TransactionDirector() throws TransactionException {
069: try {
070: jotm = new Jotm(true, true);
071: ContextManager contextManager = new ContextManager(
072: TRANSACTION_CONTEXT_BASE);
073: userTransaction = jotm.getUserTransaction();
074: contextManager.bind(USER_TRANSACTION_CONTEXT_BINDING,
075: userTransaction);
076: transactionManager = jotm.getTransactionManager();
077: contextManager.bind(TRANSACTION_MANAGER_CONTEXT_BINDING,
078: transactionManager);
079: } catch (Exception ex) {
080: throw new TransactionException(
081: "Failed to instanciate the transaction directory because : "
082: + ex.getMessage(), ex);
083: }
084: }
085:
086: /**
087: * This method inits and returns a reference to the transaction director.
088: *
089: * @return A reference to the Transaction Directory.
090: * @exception TransactionException
091: */
092: public static synchronized TransactionDirector init()
093: throws TransactionException {
094: if (singleton == null) {
095: singleton = new TransactionDirector();
096: }
097: return singleton;
098: }
099:
100: /**
101: * This method returns a reference to the transaction instance.
102: *
103: * @return A reference to the transaction director instance.
104: * @exception TransactionException
105: */
106: public static synchronized TransactionDirector getInstance()
107: throws TransactionException {
108: if (singleton == null) {
109: throw new TransactionException(
110: "The transaction director is not instanciated.");
111: }
112: return singleton;
113: }
114:
115: /**
116: * This method returns the reference to the user transaction.
117: *
118: * @return A reference to the user transaction object.
119: */
120: public UserTransaction getUserTransaction() {
121: return userTransaction;
122: }
123:
124: /**
125: * This method returns a reference to the transaction manager.
126: *
127: * @return A reference to the transaction manager object.
128: */
129: public TransactionManager getTransactionManager() {
130: return transactionManager;
131: }
132:
133: /**
134: * This method stops the transaction manager.
135: */
136: public void stop() {
137: try {
138: jotm.stop();
139: } catch (Exception ex) {
140: log.error("Failed to shut down the transaction manager : "
141: + ex.getMessage(), ex);
142: }
143: }
144: }
|