1 package org.csc.phynixx.xa;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import org.csc.phynixx.common.logger.IPhynixxLogger;
25 import org.csc.phynixx.common.logger.PhynixxLogManager;
26 import org.csc.phynixx.connection.IPhynixxConnection;
27 import org.csc.phynixx.connection.IPhynixxManagedConnection;
28
29 import javax.transaction.xa.Xid;
30 import java.util.HashMap;
31 import java.util.Map;
32
33
34
35
36 class XATransactionalBranchRepository<C extends IPhynixxConnection> implements IXATransactionalBranchRepository<C> {
37
38 private static final IPhynixxLogger LOG = PhynixxLogManager.getLogger(XATransactionalBranchRepository.class);
39
40
41 private Map<Xid, XATransactionalBranch<C>> branches = new HashMap<Xid, XATransactionalBranch<C>>();
42
43 XATransactionalBranchRepository() {
44 }
45
46 @Override
47 public XATransactionalBranch<C> instanciateTransactionalBranch(Xid xid, IPhynixxManagedConnection<C> physicalConnection) {
48 XATransactionalBranch<C> branch = branches.get(xid);
49 if (branch == null) {
50 branch = new XATransactionalBranch<C>(xid, physicalConnection);
51 branches.put(xid, branch);
52 }
53 return branch;
54
55
56 }
57
58 @Override
59 public void releaseTransactionalBranch(Xid xid) {
60 if (branches.containsKey(xid)) {
61 branches.remove(xid);
62 }
63 }
64
65 @Override
66 public XATransactionalBranch<C> findTransactionalBranch(Xid xid) {
67 return branches.get(xid);
68 }
69
70
71 @Override
72 public void close() {
73 for (XATransactionalBranch<C> branch : branches.values()) {
74 branch.close();
75 }
76 }
77
78 }