
230
6
章
リクエストのログ記録に
Command
パターンを使う
一部のアプリケーションのセマンティクスでは、すべてのアクションのログを取り、ク
ラッシュした後にそのアクションを再起動して復元することが要求されます。
Command
パターンでは、
store()
と
load()
の
2
つのメソッドを追加すれば、このようなセマンティク
スをサポートできます。
Java
ではオブジェクトのシリアライズを使ってこのようなメソッ
ドを実装できますが、一般に永続化のためにシリアライズを使う場合は注意が必要です。
どのような仕組みなのでしょうか?
コマンドを実行すると、ディスクにコマンドの
履歴が保存されます。クラッシュすると、コマンドオブジェクトをリロードし、その
execute()
メソッドをバッチで順番に呼び出します。
このようなログ記録はリモコンでは意味がありませんが、大規模なデータ構造に対し
て操作を行うようなアプリケーションは数多くあり、変更のたびに迅速に履歴を保存す
ることができません。ログを取ると、最後のチェックポイントからのすべての操作を保
存でき、システム異常が発生しても、チェックポイントに対して保存した操作を適用で
きます。表計算アプリケーションの例で考えると、変更のたびにスプレッドシートのコピーをディスクに書き込むので
はなく、スプレッドシートへの操作を記録して障害から復旧させる実装にしたいはずです。さらに高度なアプリケー
ションでは、このようなテクニックを拡張して一連の操作に対してトランザクション方式で適用し、すべての操作が完 ...