comparison paper/chapter4.tex @ 71:4e8bfd65768f

Fixed
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Sun, 02 Feb 2014 07:12:30 +0900
parents 4f31182c8244
children 6f73e05d5024
comparison
equal deleted inserted replaced
70:26bfd74c4c41 71:4e8bfd65768f
248 実装にあたり, 解決しなければならない問題はまず, ログをDataSegmentで扱える形にすることである. 248 実装にあたり, 解決しなければならない問題はまず, ログをDataSegmentで扱える形にすることである.
249 そのためには, @Messageアノテーションを付けたログのクラスの作成を行わなければならない. 249 そのためには, @Messageアノテーションを付けたログのクラスの作成を行わなければならない.
250 250
251 251
252 \subsection{TreeOperationLogのシリアライズ} 252 \subsection{TreeOperationLogのシリアライズ}
253 TreeOperationLogをシリアライズ可能な形にするにあたって気をつけなければならないのが, フィールドを 253 ログの実体であるTreeOperationLogをシリアライズ可能な形にするにあたって気をつけなければならないのが, フィールドを
254 シリアライズ可能にする部分である. 254 シリアライズ可能にする部分である.
255 TreeOperationLogはTreeOperationをいくつも保持し, TreeOperationはNodePathとNodeOperationを保持するものであった. 255 TreeOperationLogはTreeOperationをいくつも保持し, TreeOperationはNodePathとNodeOperationを保持するものであった.
256 そのため, これら全てをシリアライズ可能な形にしなければならない. 256 そのため, これら全てをシリアライズ可能な形にしなければならない.
257 257
258 基本的にこれらの実装は, フィールドを全てプリミティブなものだけにすればよい. 258 基本的にこれらの実装は, フィールドを全てプリミティブなものだけにすればよい.
259 MessagePackはListを扱うこともできるため, TreeOperationLogで継承されていたIterableの挙動もListを使うことで 259 MessagePackはListを扱うこともできるため, TreeOperationLogで継承されていたIterableの挙動もListを使うことで
260 実装を行うことができた. 260 実装を行うことができた.
261 261
262 \subsection{ログに対する情報の追加} 262 \section{ログに対する情報の追加}
263 TreeOperationLogをシリアライズ可能な形にした後, 問題が発生した. 263 TreeOperationLogをシリアライズ可能な形にした後, 問題が発生した.
264 それは, TreeOperationLog自体は木の名前を保持していないというものである. 264 それは, TreeOperationLog自体は木の名前を保持していないというものである.
265 そのため, TreeOperationLogだけを受け取っても, そのログがどの木に対して行われるのか 265 そのため, TreeOperationLogだけを受け取っても, そのログがどの木に対して行われるのか
266 わからなかった. 266 わからなかった.
267 そこで, TreeOperationLogの情報だけでなく, 木の名前とUUID, それとtimestampの情報も付与 267 そこで, TreeOperationLogの情報だけでなく, 木の名前とUUID, それとtimestampの情報も付与
270 % TreeOperationLog に木の名前の情報がない 270 % TreeOperationLog に木の名前の情報がない
271 % そのため木の名前を追加して持たせた 271 % そのため木の名前を追加して持たせた
272 % 木がなければそのばでつくるようにした 272 % 木がなければそのばでつくるようにした
273 273
274 \subsection{NetworkTreeOperationLogの実装} 274 \subsection{NetworkTreeOperationLogの実装}
275 NetworkTreeOperationLogの実装の一部を以下(\ref{fig:netlog})に示す. 275 NetworkTreeOperationLogの実装の一部を以下(\ref{src:netlog})に示す.
276 \begin{lstlisting}[frame=lrbt,label=src:netlog,caption=NetworkTreeOperationが持つフィールド,numbers=left] 276 \begin{lstlisting}[frame=lrbt,label=src:netlog,caption=NetworkTreeOperationが持つフィールド,numbers=left]
277 @Message 277 @Message
278 public class NetworkTreeOperationLog implements TreeOperationLog 278 public class NetworkTreeOperationLog implements TreeOperationLog
279 { 279 {
280 public LinkedList<NetworkTreeOperation> list; 280 public LinkedList<NetworkTreeOperation> list;
414 %データ編集が行われ, 414 %データ編集が行われ,
415 415
416 \newpage 416 \newpage
417 \section{永続性の実装} 417 \section{永続性の実装}
418 次は, ログの書き出しによる永続性の実装について述べる. 418 次は, ログの書き出しによる永続性の実装について述べる.
419 第3章でJungleはWriterいう永続性実装のための機能が元々用意されていることを述べた. 419 第3章でJungleはWriterという永続性実装のための機能が元々用意されていることを述べた.
420 永続性で考えなければならないことは, どのようなデータをどんなデータ表現で書き込むかということである. 420 永続性で考えなければならないことは, どのようなデータをどんなデータ表現で書き込むかということである.
421 今回の実装ではログであるTreeOperationLogを書き出す. 421 今回の実装ではログであるTreeOperationLogを書き出す.
422 また, TreeOperationLogの情報を保持しつつ, MessagePackでシリアライズできるクラスとして 422 また, TreeOperationLogの情報を保持しつつ, MessagePackでシリアライズできるクラスとして
423 NetworkTreeOperationLogの実装を行った. 423 NetworkTreeOperationLogの実装を行った.
424 424