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
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 }