3

サーバーからクライアントへ、またはその逆に JPA (toplink Essentials) を使用して、エンティティ クラスで楽観的ロック バージョン プロパティを処理する方法を知りたいです。

これがシナリオです。

  1. ブラウザのユーザーからサーバーにリクエストを送信し、個々のユーザー情報を編集するよう求めます。

  2. サーバーはリクエストを処理し、結果をブラウザに返します。サーバーコードは次のようになります。

    EntityManager em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();

    ユーザー u = (ユーザー)em.find(User.class, myUserId);

    あなたを返します。//ブラウザへの応答

ここで、私の混乱は User table has "version"column foroptimistic lockingです。

つまり、バージョン フィールドの値は、クライアント (私または他のユーザー) が決して使用しない場合でも、クライアントに送り返されます。バージョン フィールドは、サーバー側のコードで使用されます。

バージョン番号をクライアントに送信するのは正しいですか? そうしないと、ユーザーが変更されたデータを含む Web ページの [UPDATE] ボタンをクリックした場合に、バージョン番号を確認する方法がわかりません。

さらに明確にする必要がある場合はお知らせください。

4

1 に答える 1

5

はい、バージョン番号をクライアントに送信して、クライアントが後でそれをサーバーに送り返すことができるようにします (エンティティに加えたい変更と一緒に)。サーバーはそれを使用して競合する更新を確認できます。

サーバーは、チェックするバージョンに対して他にどのように知るでしょうか? (サーバー側のセッションに番号を入れることもできますが、それは基本的に同じテーマのバリエーションです)。重要なのは、編集するバージョンを「チェックアウト」すると、その時点のバージョン番号が引き継がれるということです。

つまり、バージョン フィールドの値は、クライアント (私または他のユーザー) が決して使用しない場合でも、クライアントに送り返されます。

まあ、あなたはそれをクライアントで使うことができます。たとえば、編集操作に時間がかかる場合、クライアントは、エンティティが同時に更新されているかどうかを時々ポーリングし、それについてユーザーに警告することができます。(Stackoverflow の「新しい回答が投稿されました」というメッセージに似ています)。

于 2011-01-05T02:15:26.170 に答える