View Javadoc

1   package com.atlassian.vcache.internal.core;
2   
3   import java.util.HashMap;
4   import java.util.Map;
5   import java.util.Optional;
6   
7   import com.atlassian.vcache.internal.RequestContext;
8   
9   import org.slf4j.Logger;
10  import org.slf4j.LoggerFactory;
11  
12  import static java.util.Objects.requireNonNull;
13  
14  /**
15   * Default implementation of {@link TransactionControlManager}.
16   */
17  public class DefaultTransactionControlManager implements TransactionControlManager
18  {
19      private static final Logger log = LoggerFactory.getLogger(DefaultTransactionControlManager.class);
20      private final Object myKey = new Object();
21  
22      private final Instrumentor instrumentor;
23  
24      public DefaultTransactionControlManager(Instrumentor instrumentor)
25      {
26          this.instrumentor = requireNonNull(instrumentor);
27      }
28  
29      @Override
30      public void registerTransactionalExternalCache(RequestContext requestContext, String cacheName, TransactionControl control)
31      {
32          final Map<String, TransactionControl> map = requestContext.computeIfAbsent(myKey, HashMap::new);
33          if (!map.containsKey(cacheName))
34          {
35              log.trace("Registering {}", cacheName);
36              map.put(cacheName, instrumentor.wrap(control, cacheName));
37          }
38      }
39  
40      @Override
41      public void syncAll(RequestContext requestContext)
42      {
43          log.trace("Synchronising all");
44          final Optional<Map<String, TransactionControl>> optionalMap = requestContext.get(myKey);
45          if (optionalMap.isPresent())
46          {
47              optionalMap.get().entrySet().forEach(e -> {
48                  log.trace("Syncing {}", e.getKey());
49                  e.getValue().transactionSync();
50              });
51          }
52      }
53  }