0

複数のユーザーが 1 つの xml ファイルにアクセスできるアプリケーションがあります。問題は、すべてのユーザーが一度に保存すると、他のユーザーによる他の変更が保存されないことです。ファイルがgroovyのユーザーにあるかどうかを検出するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

この問題は特に groovy/grails とは関係ありませんが、同時ファイル変更の基本的な問題です。この問題は、SVN や CVS などのソース コード管理システム (SCCS) と同じ方法で処理する必要があります。

具体的には、ファイルが最後に変更された時刻を保存します。これは、ファイル自体、ファイルのメタデータ、または XML ファイルがアップロードされるたびに提供される別のファイルに保存できます。ユーザーがファイルをアップロードするとき、コピーを取得してから (別のユーザーによって) 変更されていないかどうかを確認します。ある場合は、いくつかの選択肢があります。

  • 彼に最新のコピーを渡して、自分で変更をマージするように伝えます (これは、くだらない SCCS が行うことです)。
  • 変更が競合しない場合は、変更を自動的にマージしてみてください (これは、より優れた SCCS が行うことです)。競合がある場合は、ユーザーが手動で解決する必要があります。

1 つのアプローチ (やり過ぎかもしれません) は、実際に SCCS を使用してこのバージョン管理の問題を処理することです。プログラムでファイルをチェックイン、チェックアウト、およびマージできるようにするCVS (およびおそらく他の SCCS) 用の Java APIがあります。

この提案は、ファイルの同時変更を許可する必要があることを前提としています。そうでない場合は、同時変更を禁止するアプローチを使用して問題を解決する方が簡単です。

更新:コメンターの 1 人が言及し たプロパティに関するいくつかの情報は、 Grails リファレンス マニュアルversionのセクション 5.3.5 および 5.5.2.7 で入手できます。

于 2010-04-19T07:38:30.167 に答える
0

別のアプローチ: ファイル -> ユーザー マッピングを含むグローバル スコープのハッシュマップを維持します (または、どのユーザーがファイルをロックしたかが関係ない場合はファイルのリストのみ)。ユーザーがファイルを開こうとした場合:

  1. このファイルが既にマップに含まれているかどうかを確認します
  2. その場合は、試行を拒否し、エラー処理を行います
  3. そうでない場合は、マップにエントリを追加します
  4. ファイルを開いて作業を行う
  5. ファイルを保存した後、それぞれのエントリをマップから削除する必要があります

このようなグローバル スコープのハッシュマップは、属性としてServletContextに格納される場合があります。これも参照してください。

于 2010-04-19T08:09:07.717 に答える