KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfox > jdbc > xa > XAConnectionManager


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.jdbc.xa;
8
9 import java.util.Collections JavaDoc;
10 import java.util.HashMap JavaDoc;
11 import java.util.Map JavaDoc;
12 import javax.sql.XAConnection JavaDoc;
13 import javax.transaction.Transaction JavaDoc;
14
15 import org.jfox.ioc.logger.Logger;
16
17
18 /**
19  * 维护 Transaction <=> XAConnection 的对应关系
20  * 在同一个事务中,每次 XADataSource.getXAConnection() 得到的应该是同一个 XAConnection
21  *
22  * @author <a HREF="mailto:young_yy@hotmail.com">Young Yang</a>
23  */

24
25 public class XAConnectionManager {
26
27     // transaction <=> Map(url+user+pass=>xaconn)
28
private static Map JavaDoc tran2xaconns = Collections.synchronizedMap(new HashMap JavaDoc());
29     private static Logger logger = Logger.getLogger(XAConnectionManager.class.getName());
30
31 /*
32   public static void associate(Transaction tran, XAConnection xaconn) {
33     logger.debug("associate: " + tran + " => " + xaconn);
34     tran2xaconns.put(tran,xaconn);
35   }
36
37   public static boolean isAssociated(Transaction tran){
38     boolean boo = tran2xaconns.containsKey(tran);
39     logger.debug("isAssocated " + boo + ", transaction = " + tran);
40     return boo;
41   }
42
43   public static PoolableXAConnection getXAConnection(Transaction tran){
44     logger.debug("getXAConnection " + tran);
45     return (PoolableXAConnection)tran2xaconns.get(tran);
46   }
47 */

48     public static void disassociate(Transaction JavaDoc tran) {
49         logger.debug("disassociate " + tran);
50         tran2xaconns.remove(tran);
51     }
52
53     public static void disassociate(Transaction JavaDoc tran, String JavaDoc dbUrl, String JavaDoc user, String JavaDoc password) {
54         logger.debug("disassociate transaction=>" + tran + ", " + key(dbUrl, user, password));
55         if(tran2xaconns.containsKey(tran)) {
56             Map JavaDoc trans = (Map JavaDoc) tran2xaconns.get(tran);
57             trans.remove(key(dbUrl, user, password));
58             if(trans.isEmpty()) {
59                 tran2xaconns.remove(tran);
60             }
61         }
62         tran2xaconns.remove(tran);
63     }
64
65
66     public static void associate(Transaction JavaDoc tran, XAConnection JavaDoc xaconn, String JavaDoc dbUrl, String JavaDoc user, String JavaDoc pass) {
67         logger.debug("associate: " + tran + " => " + xaconn);
68         if(tran2xaconns.containsKey(tran)) {
69             Map JavaDoc trans = (Map JavaDoc) tran2xaconns.get(tran);
70             trans.put(key(dbUrl, user, pass), xaconn);
71         }
72         else {
73             Map JavaDoc trans = new HashMap JavaDoc();
74             trans.put(key(dbUrl, user, pass), xaconn);
75             tran2xaconns.put(tran, trans);
76         }
77     }
78
79     public static boolean isAssociated(Transaction JavaDoc tran, String JavaDoc dbUrl, String JavaDoc user, String JavaDoc pass) {
80         boolean boo = tran2xaconns.containsKey(tran);
81         if(boo == true) {
82             boo = ((Map JavaDoc) tran2xaconns.get(tran)).containsKey(key(dbUrl, user, pass));
83         }
84         logger.debug("isAssocated " + boo + ", transaction = " + tran + "," + key(dbUrl, user, pass));
85         return boo;
86     }
87
88     public static PoolableXAConnection getXAConnection(Transaction JavaDoc tran, String JavaDoc dbUrl, String JavaDoc user, String JavaDoc pass) {
89         logger.debug("getXAConnection " + tran + ", " + key(dbUrl, user, pass));
90         if(!tran2xaconns.containsKey(tran)) {
91             return null;
92         }
93         else {
94             return (PoolableXAConnection) ((Map JavaDoc) tran2xaconns.get(tran)).get(key(dbUrl, user, pass));
95         }
96     }
97
98     private static String JavaDoc key(String JavaDoc dbUrl, String JavaDoc user, String JavaDoc pass) {
99         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
100         sb.append(dbUrl).append(";user=").append(user).append(";password=").append(pass);
101         return sb.toString();
102     }
103
104     public static void main(String JavaDoc[] args) {
105
106     }
107 }
108
109
Popular Tags