1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.modeshape.connector.infinispan;
25
26 import java.util.Set;
27 import java.util.UUID;
28 import java.util.concurrent.locks.Lock;
29 import net.jcip.annotations.NotThreadSafe;
30 import org.infinispan.Cache;
31 import org.modeshape.graph.ExecutionContext;
32 import org.modeshape.graph.connector.base.MapTransaction;
33 import org.modeshape.graph.property.Property;
34 import org.modeshape.graph.property.Path.Segment;
35 import org.modeshape.graph.request.InvalidWorkspaceException;
36
37
38
39
40 @NotThreadSafe
41 public class InfinispanTransaction extends MapTransaction<InfinispanNode, InfinispanWorkspace> {
42
43 private final InfinispanRepository repository;
44 private final Lock lock;
45
46 protected InfinispanTransaction( ExecutionContext context,
47 InfinispanRepository repository,
48 UUID rootNodeUuid,
49 Lock lock ) {
50 super(context, repository, rootNodeUuid);
51 this.repository = repository;
52 this.lock = lock;
53 }
54
55
56
57
58
59
60 @Override
61 public Set<String> getWorkspaceNames() {
62 return repository.getWorkspaceNames();
63 }
64
65
66
67
68
69
70
71 public InfinispanWorkspace getWorkspace( String name,
72 InfinispanWorkspace originalToClone ) {
73 Cache<UUID, InfinispanNode> workspaceCache = repository.getCacheManager().getCache(name);
74 if (workspaceCache == null) {
75 String msg = InfinispanConnectorI18n.unableToCreateWorkspace.text(name, repository.getSourceName());
76 throw new InvalidWorkspaceException(msg);
77 }
78 if (originalToClone != null) {
79 return new InfinispanWorkspace(name, workspaceCache, originalToClone);
80 }
81 return new InfinispanWorkspace(name, workspaceCache, new InfinispanNode(repository.getRootNodeUuid()));
82 }
83
84
85
86
87
88
89 public boolean destroyWorkspace( InfinispanWorkspace workspace ) {
90
91 workspace.destroy();
92 return true;
93 }
94
95
96
97
98
99
100
101 @Override
102 protected InfinispanNode createNode( UUID uuid,
103 Segment name,
104 UUID parentUuid,
105 Iterable<Property> properties ) {
106 return new InfinispanNode(uuid, name, parentUuid, properties, null);
107 }
108
109
110
111
112
113
114 @Override
115 public void commit() {
116 try {
117 super.commit();
118 } finally {
119 lock.unlock();
120 }
121 }
122
123
124
125
126
127
128 @Override
129 public void rollback() {
130 try {
131 super.rollback();
132 } finally {
133 lock.unlock();
134 }
135 }
136
137 }