1

Spring Webflow、Freemarker、Hibernate (JPA)、および Oracle を使用してアプリケーションに取り組んでいます。

アプリケーションには、1 人のユーザーのみが編集できる管理ページがあります。ユーザーがそのページを編集すると、このページにアクセスしている他のユーザーには、このページを表示専用ページとして表示する必要があり、そのユーザーがページを開くと、「X がこのページを編集しているため、アクセスは読み取り専用です」という警告が表示されます。

これは Webflow または Freemarker で簡単に実行できますか?

どんな提案でも大歓迎です。

ありがとう

更新 1

JPA(Hibernate)も使用しています。

更新 2

また、アプリケーションはクラスター化された JBoss にデプロイされます。

4

1 に答える 1

4

代わりに楽観的ロックを使用します。次の戦略は、JPA で使用されるものです。

version編集するデータを保持するテーブルにフィールドを追加します。編集するデータをロードするたびに、versionフィールドもロードします。データが変更されるたびに、このバージョン フィールドを 1 ずつ増やします。ただし、データを保存できるようにするには、データベースに格納されているバージョンと同じメモリ内バージョンが必要です。

update data set ..., version = version + 1 where ... and version = :inMemoryVersion

上記のクエリで何も更新されない場合は、データが他の誰かによって更新されたことを意味します。この場合、例外をスローし、管理者にページを更新して編集をやり直すように指示します。

悲観的ロックが本当に必要な場合は、メモリ内 (アプリはクラスター化されていません) またはデータベース内ロックを維持し、ロックをロックして、ページが既にロックされている場合は読み取り専用で表示する必要があります。更新が完了したら、ロックを解除する必要があります。問題は、更新が行われない場合です。この場合、破棄されるセッションによってロックが保持されている場合は、 を使用しHttpSessionListener、 が呼び出されたときにロックを解放する必要があります。sessionDestroyed()

于 2012-07-15T10:11:17.107 に答える