2012-02-03 17 views
0

私は現在、インストール/アンインストールファイルのように動作するシステムを設計しています。インストールの主な操作はファイルを生成し、ファイル情報をデータベースに入れます。データベース内の関連情報。クリーン・エラーの要件は、何らかの問題のためにインストール/アンインストール操作が失敗したときは、システムが完全なインストール/アンインストール、またはまったくクリーンな状態でなければならないということです。推奨されるクリーン障害メカニズムは何ですか

これにはどのようなメカニズムがありますか?

答えて

1

可逆パターンは私の心に打つ:コマンドとメメント

Command patternは、一般的にクリーンなアンドゥ操作を実装するために使用されています。

ことにより、あなたは、異なる要求に クライアントをパラメータキューやリクエストをログに記録せ、オブジェクトとして要求をカプセル化し、そして 取り消し可能操作をサポート。

また、Memento patternも参照してください。

Mementoパターンは( ロールバックを介して、取り消し)以前の状態にオブジェクトを復元する 能力を提供するデザインパターンです。

メモパターンは、発信者 とケアテイカーの2つのオブジェクトで実装されています。発信者は、内部に の状態を持つオブジェクトです。ケアテイカーは創始者に何かをしようとしているが、 は変更を元に戻すことができるようにしたい。ケアテイカーは最初に オリジネーターに記念品を求める。それからそれは何をしようとしていた操作(または 操作のシーケンス)を行います。操作の前に状態 にロールバックするには、 オリジネーターにメモオブジェクトを返します。

+0

実際のファイル操作があると、アンインストールで10個のファイルを削除してデータベースを更新する必要がありますが、アンインストールが失敗すると3個のファイルが削除され、4番目のファイル削除操作で失敗しました?最も簡単な方法は、ファイルとデータベースのコピーを保存し、失敗したときにそれらをコピーすることです。他の良いアイデアは? – nobody

+0

アンインストールを実行するときに、削除するファイルを一時ディレクトリのフォルダに移動できます。すべてが正しく再移動されたことを確認したら、実際の削除コマンドを実行して、一時ディレクトリで作成したフォルダを削除します。一時ディレクトリがインストールディレクトリとは別のディスクボリュームにある場合(ヒントでは、おそらくディスク間でコピーしたくない場合)と同じように、いくつかの考慮事項があります。 – Idles

0

データベースのコミット/ロールバック操作を参照しているように私に聞こえます。

からWhat is commit and rollback? IBM。トランザクションシステムにおいて

、コミットとロールバックは、アプリケーションプログラムは、回復の単一ユニット(UR)、で表されるリソースに対するすべての変更を行うのいずれかのことを確実にするために使用されるアクションのセットを指すか、まったく変更を加えません。 2フェーズコミットプロトコルは、コミットとロールバックを提供します。アプリケーション、システム、またはリソース・マネージャーなどの要素の1つに障害が発生しても、すべての変更または変更が適用されないことが検証されます。このプロトコルにより、システムまたはサブシステムの障害後に再起動および回復処理が実行されます。

それぞれのDBは、これらの操作をサポートする必要があります。例えば、MySQL documentationを参照してください。

関連する問題