| 1 55 package org.lateralnz.simpletrans; 56 57 import java.util.Iterator ; 58 import java.util.HashMap ; 59 import java.util.Map ; 60 import java.sql.SQLException ; 61 62 import javax.transaction.Status ; 63 import javax.transaction.Synchronization ; 64 import javax.transaction.Transaction ; 65 import javax.transaction.xa.XAResource ; 66 67 import org.apache.log4j.Logger; 68 69 import org.lateralnz.common.util.DAOUtils; 70 71 84 public class SimpleTransaction implements Transaction { 85 private static final Logger log = Logger.getLogger(SimpleTransaction.class.getName()); 86 87 private Map connMap = new HashMap (); private int status; 90 93 public SimpleTransaction() { 94 if (log.isDebugEnabled()) { 95 log.debug("starting new transaction"); 96 } 97 status = Status.STATUS_ACTIVE; 98 } 99 100 104 public void commit() { 105 status = Status.STATUS_COMMITTING; 106 Iterator iter = connMap.values().iterator(); 107 while (iter.hasNext()) { 108 TransConnection conn = (TransConnection)iter.next(); 109 try { 110 conn.doCommit(); 111 112 if (conn.isCloseFlagged()) { 113 conn.doClose(); 114 iter.remove(); 115 } 116 } 117 catch (SQLException se) { 118 se.printStackTrace(); 119 } 120 } 121 status = Status.STATUS_COMMITTED; 122 } 123 124 public boolean delistResource(XAResource xAResource, int param) { 125 TransConnection conn = (TransConnection)xAResource; 126 DAOUtils.close(conn); 127 connMap.remove(conn.getName()); 128 return true; 129 130 } 131 132 133 public boolean enlistResource(XAResource xAResource) { 134 if (!(xAResource instanceof TransConnection)) { 135 throw new UnsupportedOperationException (); 136 } 137 try { 138 TransConnection conn = (TransConnection)xAResource; 139 conn.setAutoCommit(false); 140 connMap.put(conn.getName(), conn); 141 return true; 142 } 143 catch (SQLException se) { 144 se.printStackTrace(); 145 return false; 146 } 147 } 148 149 150 153 public Object getResource(String name) { 154 if (connMap.containsKey(name)) { 155 return connMap.get(name); 156 } 157 else { 158 return null; 159 } 160 } 161 162 165 public int getStatus() { 166 return status; 167 } 168 169 172 public void registerSynchronization(Synchronization synchronization) { 173 throw new UnsupportedOperationException (); 174 } 175 176 179 public void rollback() { 180 status = Status.STATUS_ROLLING_BACK; 181 Iterator iter = connMap.values().iterator(); 182 while (iter.hasNext()) { 183 TransConnection conn = (TransConnection)iter.next(); 184 try { 185 if (log.isDebugEnabled()) { 186 log.debug("rollback connection " + conn); 187 } 188 conn.doRollback(null); 189 190 if (conn.isCloseFlagged()) { 191 if (log.isDebugEnabled()) { 192 log.debug("close flagged, so closing connection"); 193 } 194 conn.doClose(); 195 iter.remove(); 196 } 197 } 198 catch (SQLException se) { 199 se.printStackTrace(); 200 } 201 } 202 status = Status.STATUS_ROLLEDBACK; 203 } 204 205 208 public void setRollbackOnly() { 209 status = Status.STATUS_MARKED_ROLLBACK; 210 } 211 } | Popular Tags |