0

みんな。

Swing ベースのクライアント アプリケーション用の汎用テーブル コンポーネントを開発しています。このテーブル コンポーネントは、クライアント側でユーザー インターフェイスとして機能し、リモート EJB インターフェイスを呼び出して CRUD アクションを実行することになっています。

テーブルのデータ モデルは、基本的に jpa エンティティのリストです。クエリ関数の実装に問題はありませんが、永続化アクションが発生すると、「コミット」戦略について少し混乱します。

私は次のアプローチを考えています:

  1. 編集/挿入/削除された行リストをこのテーブルで管理し、ユーザーが「保存」ボタンをクリックしたときにリストをリモート EJB に送信してみてください。EJB は CMT で CUD アクションを実行します。ユーザーはサーバー側で CUD の失敗を引き起こすシーケンス関連のアクションを実行できるため、リストの管理は難しいようです。たとえば、クライアント側では、ユーザーは最初に既存のレコードとまったく同じデータを持つレコードを挿入してから、既存のレコードを削除できます。データベース テーブルに一意の制約がある場合、INSERT が最初に実行されるため、保存アクションは失敗します。したがって、リストを送信する前に、このようなケースを防止する必要があります。

  2. テーブル コンポーネントを自動コミット スタイルにします。エンド ユーザーが実行するすべての挿入\更新\削除アクションは、データが保持されるようにリモート メソッドを呼び出します。クライアントがネットワーク レイテンシーの大きい場所に展開されている場合、このアプローチは遅くなると思います。また、My Table コンポーネントは、入力データが有効になるまで行を修正するなどの追加機能を提供する必要があります。これは、テーブル コンポーネントが null や一意ではないなどの制約のあるデータベース スキーマを操作している場合に備えます。

  3. UserTransaction を取得し、クライアント側でトランザクションを管理します。これについて何か読んだことがありますが、実装方法がわかりません。

正しいアプローチはどれですか?アドバイスありがとうございます。

4

1 に答える 1