さまざまなユーザーがデータベースを操作する Java EE Web アプリケーションを作成したいと考えています。ユーザーは、レコードの編集を開始してから、変更を保存するか、編集をキャンセルできます。ユーザーが編集している間、他のユーザーに対してレコードをロックする必要があります。データベース レベルでロックする必要があります。同じデータベースを編集している他の非 Java ユーザーもいて、作業しているレコードをロックしているためです。
基本的な Java + データベースのいくつかは理解していますが、ロックなどの複数ユーザーの操作は苦手です。インターネットでいくつかの例を探していると、Java EE テクノロジのすべての「こんにちは世界」の例では、少なくとも 1 つの別のテクノロジが導入されているように思えます。データベース内のオブジェクトにアクセスするには、JPA を使用します。レコードをロックするには、おそらく JTA をもたらすトランザクションが必要です。JTA を使用するには、JNDI が必要です。これらすべてのオブジェクトを操作するには、おそらく EJB とインジェクションも必要です...そして現時点では、これが本当に問題を解決する最も簡単な方法なのか、それとも何か重要なことを見逃していたのか疑問に思っています。これらすべての技術が必要かどうかはわかりません (必要な場合は、それらを使用します。それらすべてを学ぶ前に確認したいだけです)。私がウェブで見つけた例は、それらを非常に寛大に紹介していることがわかります。
Java EE コードの簡単な例を教えてください。
JPAを使用します。
「persistence.xml」ファイルに記述されているデータベースに接続します。
テーブルに格納されたプロパティとを持つ
MyObject
クラスがあります。id
name
MYOBJECT
データベースレベルでオブジェクトをロックするメソッド (JSP ページから呼び出されるなど) を持つ
id = 42
(同じデータベースにアクセスできる Java 以外のユーザーもオブジェクトを変更できないようにする)、またはレコードが別のユーザーによって既にロックされている場合はエラーを表示するユーザー (別の Java ユーザーまたは非 Java ユーザーのいずれか);name
を指定された値に更新してロックを解放するか、空の文字列が指定されている場合は単にロックを解放する別のメソッド (別の JSP から呼び出されるなど) があります。
ソリューションに導入された新しいテクノロジーごとに、そのテクノロジーを使用した理由を簡単に説明してください。また、そのテクノロジーが新しいライブラリのインストール、構成ファイルの作成または変更、追加のコードの作成などを必要とするかどうか (メソッドを呼び出す JSP ファイルは必要ありません。データベース関連の部分に興味があります。)
(別の詳細: EntityTransaction と UserTransaction の違いについて説明します。私の理解が正しければ、複数のデータベースを使用する場合にのみ JTA が必要です。スキーマが異なる 1 つの Oracle データベースのみを使用する場合にも JTA は必要ですか? はいの場合は、サンプル コードは JTA を使用して記述します。)