タイトルはおそらく十分に明確ではないので、説明してみましょう。私は.NET上に構築された新しいプロジェクトに取り組んでいます。これは、WCF Webサービスを使用してOracleデータベースにアクセスするWPFクライアントで構成されています。問題は、この基本的なアーキテクチャではなく、既存のものとどのように連携するかです。
現在、アプリケーションは PowerBuilder を使用して作成され、データベースに直接接続します。さらに、Oracle のSELECT .. FOR UPDATE
ステートメントを広範囲に使用して、レコードをロックすることで同時実行性を管理します。新しいアプリケーションは古いアプリケーションと並行して存在する必要があるため、同様の方法でレコードをロックすることになっていますが、Web サービスに依存する新しいアーキテクチャではこれが容易ではありません。
今のところ、私たちが考えているのは、Web サービスによって呼び出され、データベースへのアクセスを担当する「データ サーバー」を構築することです。このサーバーの目的は、いくつかの Web サービス呼び出し全体でレコード ロックを維持するために必要なオープンな接続/トランザクションを維持することです。これが必要になるのは、必要な操作の「選択」とそれに続く「更新」の部分が、SELECT .. FOR UPDATE
少なくとも 2 つの別個の Web サービス呼び出し (「レコードの取得」と「更新の投稿」) で発生する可能性が最も高いためです。
この種の状況に関するドキュメントをインターネットで検索しましたが、この件に関してはあまり見つけられないようです。これ、つまり、複数の Web サービス呼び出しの間、レコード ロックを開いたままにしておくことはできますか? ちゃんと?私のアプローチは適切ですか?この問題に関して公開されている「ベストプラクティス」はありますか?
更新:質問の元のタイトルは、サービス指向アーキテクチャでレコード ロックを維持する方法は? でした。いくつかの答えを刺激することを期待して、ジョンの提案に従って変更しました。