Mercurial > hg > blitz_condensed
comparison src/org/dancres/blitz/txn/PersistentPersonality.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children | 4580bb12db30 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3dc0c5604566 |
---|---|
1 package org.dancres.blitz.txn; | |
2 | |
3 import java.util.logging.Level; | |
4 | |
5 import org.prevayler.implementation.SnapshotPrevayler; | |
6 import org.prevayler.implementation.SnapshotPrevaylerImpl; | |
7 | |
8 import org.prevayler.PrevalentSystem; | |
9 | |
10 import org.dancres.blitz.config.Persistent; | |
11 | |
12 import org.dancres.blitz.disk.Disk; | |
13 | |
14 import org.dancres.blitz.txn.batch.*; | |
15 | |
16 /** | |
17 Understands how to translate Persistent into core component configuration. | |
18 | |
19 @see org.dancres.blitz.config.Persistent | |
20 */ | |
21 class PersistentPersonality implements StoragePersonality { | |
22 private Persistent theModel; | |
23 private String theLogDir; | |
24 | |
25 PersistentPersonality(Persistent aModel, String aLogDir) { | |
26 theModel = aModel; | |
27 theLogDir = aLogDir; | |
28 | |
29 TxnManager.theLogger.log(Level.INFO, "PersistentPersonality"); | |
30 TxnManager.theLogger.log(Level.INFO, "Max logs before sync: " + | |
31 theModel.getMaxLogsBeforeSync()); | |
32 TxnManager.theLogger.log(Level.INFO, "Reset log stream: " + | |
33 theModel.shouldResetLogStream()); | |
34 TxnManager.theLogger.log(Level.INFO, "Write barrier window: " + | |
35 theModel.getBatchWriteWindowSize()); | |
36 | |
37 if (theModel.useConcurrentWriteBatcher()) | |
38 TxnManager.theLogger.log(Level.INFO, | |
39 "*** Using concurrent batcher ***"); | |
40 | |
41 if (theModel.shouldCleanLogs()) { | |
42 TxnManager.theLogger.log(Level.WARNING, | |
43 "*** Automatically cleaning logs *** [EXPERIMENTAL]"); | |
44 } | |
45 | |
46 Disk.init(); | |
47 } | |
48 | |
49 public CheckpointTrigger getCheckpointTrigger(Checkpointer aCheckpointer) { | |
50 return | |
51 new OpCountingCheckpointTrigger(aCheckpointer, | |
52 theModel.getMaxLogsBeforeSync()); | |
53 } | |
54 | |
55 public SnapshotPrevayler getPrevayler(PrevalentSystem aSystem) | |
56 throws Exception { | |
57 | |
58 PersistentReboot myReboot = new PersistentReboot(theModel); | |
59 myReboot.execute(); | |
60 | |
61 SnapshotPrevayler myPrevayler = | |
62 new SnapshotPrevaylerImpl(aSystem, | |
63 theLogDir, | |
64 theModel.shouldResetLogStream(), | |
65 theModel.shouldCleanLogs(), | |
66 theModel.getLogBufferSize()); | |
67 | |
68 if (theModel.getBatchWriteWindowSize() != 0) { | |
69 int myWindowSize = theModel.getBatchWriteWindowSize(); | |
70 | |
71 if (theModel.useConcurrentWriteBatcher()) { | |
72 myPrevayler = | |
73 new ConcurrentWriteBatcher(myPrevayler, myWindowSize); | |
74 } else { | |
75 myPrevayler = | |
76 new WriteBatcher(myPrevayler, myWindowSize); | |
77 } | |
78 } | |
79 | |
80 return myPrevayler; | |
81 } | |
82 | |
83 public void destroy() { | |
84 Disk.destroy(); | |
85 Disk.clean(theLogDir); | |
86 } | |
87 } |