Mercurial > hg > Database > jungle-network
comparison src/main/java/alice/jungle/persistent/PersistentTransactionManager.java @ 105:f9e29a52efd3
Move some files
author | one |
---|---|
date | Tue, 26 Nov 2013 06:43:10 +0900 |
parents | src/alice/jungle/persistence/PersistentTransactionManager.java@0c98717f186e |
children | 3f9c6ab43461 |
comparison
equal
deleted
inserted
replaced
104:03bf62bb699e | 105:f9e29a52efd3 |
---|---|
1 package alice.jungle.persistent; | |
2 | |
3 import java.util.Iterator; | |
4 | |
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; | |
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; | |
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result; | |
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; | |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; | |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; | |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; | |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext; | |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TransactionManager; | |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; | |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation; | |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; | |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
20 | |
21 public class PersistentTransactionManager<T extends TreeNode<T>> implements TransactionManager<T> { | |
22 private final AtomicReservableReference<TreeContext<T>> repository; | |
23 private final TreeContext<T> tip; | |
24 private final ChangeListWriter writer; | |
25 private final String uuid; | |
26 private final String treeName; | |
27 | |
28 public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext<T> _tip, | |
29 AtomicReservableReference<TreeContext<T>> _repository,String _uuid) | |
30 { | |
31 repository = _repository; | |
32 tip = _tip; | |
33 writer = _writer; | |
34 uuid = _uuid; | |
35 treeName = _treeName; | |
36 } | |
37 | |
38 @Override | |
39 public Either<Error, TransactionManager<T>> commit(T _newRoot,final TreeOperationLog _log) { | |
40 ChangeSet cs = tip.getChangeSet(); | |
41 long currentRevision = cs.revision(); | |
42 long nextRevision = currentRevision + 1; | |
43 | |
44 PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log); | |
45 Node root = _newRoot.getAsNode(); | |
46 PersistentChangeSet newCs = new PersistentChangeSet(root, cs, list, uuid, treeName, nextRevision); | |
47 DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_newRoot,newCs); | |
48 | |
49 @SuppressWarnings("rawtypes") | |
50 Reservation reservation = repository.makeReservation(tip, newContext); | |
51 if(reservation == null) { | |
52 return DefaultEither.newA((Error)new DefaultError()); | |
53 } | |
54 Result r = writer.write(list); | |
55 if(r != Result.SUCCESS) { | |
56 return DefaultEither.newA((Error)new DefaultError()); | |
57 } | |
58 reservation.confirm(); | |
59 TransactionManager<T> txManager = new PersistentTransactionManager<T>(treeName, writer, newContext, repository, uuid); | |
60 return DefaultEither.newB(txManager); | |
61 } | |
62 | |
63 @Override | |
64 public long getRevision() | |
65 { | |
66 ChangeSet cs = tip.getChangeSet(); | |
67 return cs.revision(); | |
68 } | |
69 | |
70 @Override | |
71 public String getUUID() { | |
72 return uuid; | |
73 } | |
74 | |
75 | |
76 | |
77 } |