Patch for DummyTransactionManager.java
twundke Jan 20, 2005 10:59 PMHere's the second of my patches.
The DummyTransactionManager uses a ThreadLocal to store transactions. However, the manager then stores a Map in the ThreadLocal, containing transactions keyed by Thread. Perhaps I'm missing something, but as far as I can see the Map just isn't needed as ThreadLocal stores values per thread itself.
Here's a patch against revision 1.14 that removes the offending code.
*** DummyTransactionManager.java.#.1.14 Thu Jan 20 14:17:51 2005
--- DummyTransactionManager.java Thu Jan 20 11:32:31 2005
***************
*** 6,13 ****
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.transaction.*;
- import java.util.HashMap;
- import java.util.Map;
import java.util.Properties;
/**
--- 6,11 ----
***************
*** 20,31 ****
static DummyTransactionManager instance=null;
static Logger log=Logger.getLogger(DummyTransactionManager.class);
! static ThreadLocal thread_local=new ThreadLocal() {
! protected synchronized Object initialValue() {
! Map map=new HashMap();
! return java.util.Collections.synchronizedMap(map);
! }
! };
public DummyTransactionManager() {
;
--- 18,24 ----
static DummyTransactionManager instance=null;
static Logger log=Logger.getLogger(DummyTransactionManager.class);
! static ThreadLocal thread_local=new ThreadLocal();
public DummyTransactionManager() {
;
***************
*** 185,193 ****
* unexpected way.
*/
public Transaction getTransaction() throws SystemException {
! Map map=(Map)thread_local.get();
! String thread=Thread.currentThread().toString();
! return (Transaction)map.get(thread);
}
/**
--- 178,184 ----
* unexpected way.
*/
public Transaction getTransaction() throws SystemException {
! return (Transaction)thread_local.get();
}
/**
***************
*** 240,253 ****
}
void setTransaction(Transaction tx) {
- Map map=(Map)thread_local.get();
- String thread=Thread.currentThread().toString();
- // map.put(this, tx);
if(tx == null) {
! map.remove(thread);
}
else {
! map.put(thread, tx);
}
}
--- 231,241 ----
}
void setTransaction(Transaction tx) {
if(tx == null) {
! thread_local.remove();
}
else {
! thread_local.set(tx);
}
}Tim.