1 6 7 package org.jfox.jdbc.xa; 8 9 import java.util.Collections ; 10 import java.util.HashMap ; 11 import java.util.Map ; 12 import javax.sql.XAConnection ; 13 import javax.transaction.Transaction ; 14 15 import org.jfox.ioc.logger.Logger; 16 17 18 24 25 public class XAConnectionManager { 26 27 private static Map tran2xaconns = Collections.synchronizedMap(new HashMap ()); 29 private static Logger logger = Logger.getLogger(XAConnectionManager.class.getName()); 30 31 48 public static void disassociate(Transaction tran) { 49 logger.debug("disassociate " + tran); 50 tran2xaconns.remove(tran); 51 } 52 53 public static void disassociate(Transaction tran, String dbUrl, String user, String password) { 54 logger.debug("disassociate transaction=>" + tran + ", " + key(dbUrl, user, password)); 55 if(tran2xaconns.containsKey(tran)) { 56 Map trans = (Map ) 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 tran, XAConnection xaconn, String dbUrl, String user, String pass) { 67 logger.debug("associate: " + tran + " => " + xaconn); 68 if(tran2xaconns.containsKey(tran)) { 69 Map trans = (Map ) tran2xaconns.get(tran); 70 trans.put(key(dbUrl, user, pass), xaconn); 71 } 72 else { 73 Map trans = new HashMap (); 74 trans.put(key(dbUrl, user, pass), xaconn); 75 tran2xaconns.put(tran, trans); 76 } 77 } 78 79 public static boolean isAssociated(Transaction tran, String dbUrl, String user, String pass) { 80 boolean boo = tran2xaconns.containsKey(tran); 81 if(boo == true) { 82 boo = ((Map ) 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 tran, String dbUrl, String user, String 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 ) tran2xaconns.get(tran)).get(key(dbUrl, user, pass)); 95 } 96 } 97 98 private static String key(String dbUrl, String user, String pass) { 99 StringBuffer sb = new StringBuffer (); 100 sb.append(dbUrl).append(";user=").append(user).append(";password=").append(pass); 101 return sb.toString(); 102 } 103 104 public static void main(String [] args) { 105 106 } 107 } 108 109 | Popular Tags |