Mercurial > hg > Database > jungle-network
comparison src/main/java/app/bbs/NetworkJungleBulletinBoard.java @ 118:f64ff5bd66f5
Implements persistent for bbs app and Fixed bug JungleUpdater
author | one |
---|---|
date | Wed, 25 Dec 2013 20:02:26 +0900 |
parents | 8f9811a1e00c |
children | cef245f71053 |
comparison
equal
deleted
inserted
replaced
117:24fdf5126f4d | 118:f64ff5bd66f5 |
---|---|
1 package app.bbs; | 1 package app.bbs; |
2 | 2 |
3 import java.io.File; | |
4 import java.io.FileNotFoundException; | |
5 import java.io.IOException; | |
3 import java.nio.ByteBuffer; | 6 import java.nio.ByteBuffer; |
4 import java.util.Date; | 7 import java.util.Date; |
5 import java.util.concurrent.atomic.AtomicInteger; | 8 import java.util.concurrent.atomic.AtomicInteger; |
6 | 9 |
7 import alice.jungle.core.NetworkDefaultJungle; | 10 import alice.jungle.core.NetworkDefaultJungle; |
8 import alice.jungle.persistent.AliceJournal; | 11 import alice.jungle.persistent.PersistentJournal; |
12 import alice.jungle.transaction.JungleUpdater; | |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; | 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; | 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; | |
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; | |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; | 20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; | 21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; | 22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; | 23 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; | 24 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; |
22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; | 28 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; |
23 | 29 |
24 public class NetworkJungleBulletinBoard implements BulletinBoard | 30 public class NetworkJungleBulletinBoard implements BulletinBoard |
25 { | 31 { |
26 private final Jungle jungle; | 32 private final Jungle jungle; |
27 | 33 private final PersistentJournal journal; |
28 public NetworkJungleBulletinBoard(String _uuid) | 34 |
29 { | 35 public NetworkJungleBulletinBoard(String _uuid) throws FileNotFoundException |
30 jungle = new NetworkDefaultJungle(new AliceJournal(), _uuid,new DefaultTreeEditor(new DefaultTraverser())); | 36 { |
31 jungle.createNewTree("boards"); | 37 journal = new PersistentJournal(); |
38 jungle = new NetworkDefaultJungle(journal, _uuid,new DefaultTreeEditor(new DefaultTraverser())); | |
32 JungleManager.setJungle(jungle); | 39 JungleManager.setJungle(jungle); |
40 } | |
41 | |
42 public void init() throws IOException { | |
43 commitLogRecover(); | |
44 } | |
45 | |
46 public void commitLogRecover() throws IOException { | |
47 File[] logFiles = new File("./log/").listFiles(); | |
48 for(File logFile : logFiles) { | |
49 commitLogRecover(logFile); | |
50 logFile.delete(); | |
51 } | |
52 if(jungle.getTreeByName("boards") == null) { | |
53 jungle.createNewTree("boards"); | |
54 } | |
55 } | |
56 | |
57 private void commitLogRecover(File logFile) throws IOException { | |
58 journal.setInputFile(logFile); | |
59 ChangeListReader reader = journal.getReader(); | |
60 if (reader == null) return; | |
61 for (ChangeList chList : reader) { | |
62 String treeName = chList.getTreeName(); | |
63 JungleTree tree = jungle.getTreeByName(treeName); | |
64 if(tree == null) { | |
65 tree = jungle.createNewTree(treeName); | |
66 } | |
67 JungleTreeEditor editor = tree.getLocalTreeEditor(); | |
68 Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, chList); | |
69 editor = either.b(); | |
70 if(either.isA()) { | |
71 throw new IOException("Failed commit log recovery"); | |
72 } | |
73 editor.success(); | |
74 } | |
33 } | 75 } |
34 | 76 |
35 public Iterable<String> getBoards() | 77 public Iterable<String> getBoards() |
36 { | 78 { |
37 JungleTree tree = jungle.getTreeByName("boards"); | 79 JungleTree tree = jungle.getTreeByName("boards"); |