Mercurial > hg > Database > jungle-network
comparison src/main/java/alice/jungle/persistent/PersistentTransactionManager.java @ 178:d6944d788121
fit Junglecore
author | tatsuki |
---|---|
date | Thu, 04 Sep 2014 13:12:25 +0900 |
parents | 6f104ab4eb81 |
children | 2828205bdc3a |
comparison
equal
deleted
inserted
replaced
177:89db8388db0f | 178:d6944d788121 |
---|---|
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; |
17 | 17 |
18 public class PersistentTransactionManager<T extends TreeNode> implements TransactionManager<T> { | 18 public class PersistentTransactionManager implements TransactionManager { |
19 private final AtomicReservableReference<TreeContext<T>> repository; | 19 private final AtomicReservableReference<TreeContext> repository; |
20 private final TreeContext<T> tip; | 20 private final TreeContext tip; |
21 private final ChangeListWriter writer; | 21 private final ChangeListWriter writer; |
22 private final String uuid; | 22 private final String uuid; |
23 private final String treeName; | 23 private final String treeName; |
24 | 24 |
25 public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext<T> _tip, | 25 public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext _tip, |
26 AtomicReservableReference<TreeContext<T>> _repository,String _uuid) | 26 AtomicReservableReference<TreeContext> _repository,String _uuid) |
27 { | 27 { |
28 repository = _repository; | 28 repository = _repository; |
29 tip = _tip; | 29 tip = _tip; |
30 writer = _writer; | 30 writer = _writer; |
31 uuid = _uuid; | 31 uuid = _uuid; |
32 treeName = _treeName; | 32 treeName = _treeName; |
33 } | 33 } |
34 | 34 |
35 @Override | 35 @Override |
36 public Either<Error, TransactionManager<T>> commit(TreeNode _newRoot,final TreeOperationLog _log) { | 36 public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log) { |
37 ChangeSet cs = tip.getChangeSet(); | 37 ChangeSet cs = tip.getChangeSet(); |
38 long currentRevision = cs.revision(); | 38 long currentRevision = cs.revision(); |
39 long nextRevision = currentRevision + 1; | 39 long nextRevision = currentRevision + 1; |
40 | 40 |
41 PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log); | 41 PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log); |
42 TreeNode root = _newRoot; | 42 TreeNode root = _newRoot; |
43 PersistentChangeSet newCs = new PersistentChangeSet(root, cs, list, uuid, treeName, nextRevision); | 43 PersistentChangeSet newCs = new PersistentChangeSet(root, cs, list, uuid, treeName, nextRevision); |
44 DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_newRoot,newCs); | 44 DefaultTreeContext newContext = new DefaultTreeContext(_newRoot,newCs); |
45 | 45 |
46 @SuppressWarnings("rawtypes") | 46 @SuppressWarnings("rawtypes") |
47 Reservation reservation = repository.makeReservation(tip, newContext); | 47 Reservation reservation = repository.makeReservation(tip, newContext); |
48 if(reservation == null) { | 48 if(reservation == null) { |
49 return DefaultEither.newA((Error)new DefaultError()); | 49 return DefaultEither.newA((Error)new DefaultError()); |
51 Result r = writer.write(list); | 51 Result r = writer.write(list); |
52 if(r != Result.SUCCESS) { | 52 if(r != Result.SUCCESS) { |
53 return DefaultEither.newA((Error)new DefaultError()); | 53 return DefaultEither.newA((Error)new DefaultError()); |
54 } | 54 } |
55 reservation.confirm(); | 55 reservation.confirm(); |
56 TransactionManager<T> txManager = new PersistentTransactionManager<T>(treeName, writer, newContext, repository, uuid); | 56 TransactionManager txManager = new PersistentTransactionManager(treeName, writer, newContext, repository, uuid); |
57 return DefaultEither.newB(txManager); | 57 return DefaultEither.newB(txManager); |
58 } | 58 } |
59 | 59 |
60 @Override | 60 @Override |
61 public long getRevision() | 61 public long getRevision() |