0

環境:アプリケーションは Spring Framework 2.5.6.SEC01 および iBatis 2.3.4.726 を使用しています。MVCデザインです。

シナリオは次のとおりです。

  1. クライアントからのデータ入力・更新

  2. 更新ボタンを押して送信してください

  3. データを処理し、DML を実行 (挿入、更新、削除)

  4. 結果をクライアントに戻し、データを表示する

  5. ただし、ページがロードされたら、Javascript を介して API を呼び出す必要があります(API を制御することはできません。必要なパラメーターを渡して、成功またはエラーの場合に結果を確認するだけです)。

  6. API が SUCCESS を返した場合、何もする必要はありません。しかし、それは ERROR を返します。ユーザーに通知するアラート メッセージを表示します。

    ビュー (クライアント)、サービス、およびデータ アクセス レイヤーがあります。クライアントが送信を行うと (シナリオ #2)、サービスに入り、データを処理して自動的にトランザクションを開始します (シナリオ #3)。サービスの終了時にコミットを自動的に実行し、クライアントに戻ってデータを表示します (シナリオ #4)。

問題:コミットを実行しないようにトランザクションを一時停止してから、クライアントに戻って Javascript 経由で APIを呼び出すにはどうすればよいですか。API が SUCCESS を返したら、Ajax (またはその他の方法) を介してコミットを実行するか、ロールバックします。

正しい方向へのガイダンスをいただければ幸いです。

4

1 に答える 1

1

私の理解が正しければ、データベース トランザクションを開始し、(コミットせずに) データを挿入し、接続とトランザクションを開いたままにして、クライアントに戻り、JavaScript の結果に基づいてコミットします。

これは、クライアントが実際に接続を開いたままにしておくことができる奇妙な設計のように感じられ、(D)DOS 攻撃や一般的なクライアントの問題に対してアプリケーションが非常に脆弱になります。

私は次のようにそれを改造するのに本当に一生懸命努力します:

  1. 送信時に、コミット/保存アクションを確認するために必要な JavaScript を呼び出します
  2. JavaScript が成功したら、自分のサーバーに送信します。
  3. トランザクションをクライアントに公開せずに、DAO 内で通常の接続/トランザクション処理を行います。

これはより速く、より堅牢で、おそらくコードも少なくなります。

于 2011-07-01T18:53:33.637 に答える