View Javadoc

1   package org.csc.phynixx.xa;
2   
3   /*
4    * #%L
5    * phynixx-xa
6    * %%
7    * Copyright (C) 2014 Christoph Schmidt-Casdorff
8    * %%
9    * Licensed under the Apache License, Version 2.0 (the "License");
10   * you may not use this file except in compliance with the License.
11   * You may obtain a copy of the License at
12   * 
13   *      http://www.apache.org/licenses/LICENSE-2.0
14   * 
15   * Unless required by applicable law or agreed to in writing, software
16   * distributed under the License is distributed on an "AS IS" BASIS,
17   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18   * See the License for the specific language governing permissions and
19   * limitations under the License.
20   * #L%
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   * Created by Christoph Schmidt-Casdorff on 10.02.14.
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  }