KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfox > tm > TxManager


1 /* JFox, the OpenSource J2EE Application Server
2  *
3  * Distributable under GNU LGPL license by gun.org
4  * more details please visit http://www.huihoo.org/jfox
5  */

6
7 package org.jfox.tm;
8
9 import javax.transaction.HeuristicMixedException JavaDoc;
10 import javax.transaction.HeuristicRollbackException JavaDoc;
11 import javax.transaction.InvalidTransactionException JavaDoc;
12 import javax.transaction.NotSupportedException JavaDoc;
13 import javax.transaction.RollbackException JavaDoc;
14 import javax.transaction.Status JavaDoc;
15 import javax.transaction.SystemException JavaDoc;
16 import javax.transaction.Transaction JavaDoc;
17 import javax.transaction.TransactionManager JavaDoc;
18
19 /**
20  * @author <a HREF="mailto:young_yy@hotmail.com">Young Yang</a>
21  */

22
23 public class TxManager implements TransactionManager JavaDoc {
24
25     private static ThreadLocal JavaDoc threadTx = new ThreadLocal JavaDoc() {
26         protected Object JavaDoc initialValue() {
27             return new TxWrapper();
28         }
29
30         public Object JavaDoc get() {
31             Object JavaDoc obj = super.get();
32             if(obj == null) {
33                 obj = initialValue();
34                 super.set(obj);
35             }
36             return obj;
37         }
38     };
39
40     // singleton instance
41
private static TxManager me = new TxManager();
42
43     private volatile int numTrasactions = 0;
44     private volatile int numSuspendedTransactions = 0;
45
46     public static TxManager getInstance() {
47         return me;
48     }
49
50     public void begin() throws NotSupportedException JavaDoc, SystemException JavaDoc {
51         numTrasactions++;
52         ((TxWrapper) threadTx.get()).begin();
53     }
54
55     public void commit() throws RollbackException JavaDoc, HeuristicMixedException JavaDoc, HeuristicRollbackException JavaDoc, SecurityException JavaDoc, IllegalStateException JavaDoc, SystemException JavaDoc {
56         numTrasactions--;
57         try {
58             ((TxWrapper) threadTx.get()).commit();
59         }
60         finally {
61             threadTx.set(null);
62         }
63     }
64
65     public void rollback() throws IllegalStateException JavaDoc, SecurityException JavaDoc, SystemException JavaDoc {
66         numTrasactions--;
67         try {
68             ((TxWrapper) threadTx.get()).rollback();
69         }
70         finally {
71             threadTx.set(null);
72         }
73     }
74
75     public int getStatus() throws SystemException JavaDoc {
76         Transaction JavaDoc tx = (TxWrapper) threadTx.get();
77         if(tx==null) {
78             return Status.STATUS_NO_TRANSACTION;
79         }
80         else {
81             return tx.getStatus();
82         }
83     }
84
85     public Transaction JavaDoc getTransaction() throws SystemException JavaDoc {
86         return (TxWrapper) threadTx.get();
87     }
88
89     public void setRollbackOnly() throws IllegalStateException JavaDoc, SystemException JavaDoc {
90         ((TxWrapper) threadTx.get()).setRollbackOnly();
91     }
92
93     public void setTransactionTimeout(int seconds) throws SystemException JavaDoc {
94         ((TxWrapper) threadTx.get()).setTimeout(seconds * 1000);
95     }
96
97     public Transaction JavaDoc suspend() throws SystemException JavaDoc {
98         Transaction JavaDoc trans = ((TxWrapper) threadTx.get()).suspend();
99         numSuspendedTransactions++;
100         return trans;
101     }
102
103     public void resume(Transaction JavaDoc transaction) throws InvalidTransactionException JavaDoc, IllegalStateException JavaDoc, SystemException JavaDoc {
104         if(transaction == null || !(transaction instanceof TransactionImpl)) {
105             throw new InvalidTransactionException JavaDoc(transaction + " is not a instance of " + TransactionImpl.class.getName());
106         }
107         ((TxWrapper) threadTx.get()).resume(transaction);
108         numSuspendedTransactions--;
109     }
110
111     int getNumTransactions() {
112         return numTrasactions;
113     }
114
115     int getNumSuspendedTransactions() {
116         return numSuspendedTransactions;
117     }
118
119     public static void main(String JavaDoc[] args) {
120
121     }
122 }
Popular Tags