4

Delphi datasnap サーバーに次のロジックを配置するのに最適な「正しい」場所を見つけようとしています。

ユーザーがサーバーに接続し、提供された資格情報を使用して、一元化された AuthorizationDatabase (Oracle データベース) を使用してそれらを検証します。彼らが実際に有効なユーザーである場合は、承認リポジトリの内容 (別のホスト、データベース、ユーザー名、パスワードなど) に基づいて、データが実際に存在する場所への接続を提供したいと考えています。

私は独自のサーバー クラスに AuthorizationDatabase を持っています。これはサーバーのライフ サイクルです。これは並行性に問題を引き起こしますか? 同時に 10 人のユーザーがログインして検証されますが、これはうまくいきますか?

すべてのセッションレベルのデータモジュールが派生するベースサーバーモジュールがあり、アプリケーション接続があります。アプリケーション接続パラメータは、ログインしているユーザーに基づいて変更できます。

私が抱えている問題は、承認/検証/新しい DB パラメータの割り当てプロセスをどこに置くかです。

この種の 2 段階のデータベース アプローチはどこに最も適していますか? ユーザーはある場所で検証されますが、最終的にアクセスするデータは別の場所にあるというのは、かなり一般的なことのように思えます。

例を見てみると、明確な場所がわかりません。

4

1 に答える 1

2

複数のセッションで 1 つの接続を共有することは安全ではありません。2 つのセッションが同時にデータベースを読み取ろうとすると、「読み取りエラー」またはその他のエラーが発生します。

しかし、ログインのための一元化された場所を持つことができます。それをスレッドセーフにするだけです。これでうまくいきます:

TMonitor.Enter(LoginDM);
Try
 valid := LoginDM.Login(username, password);
finally
  TMonitor.Exit(LoginDM);
end;

データにアクセスするユーザーについては、各ユーザーがスレッドで実行される独自のセッションを持っているため、ServerClass インスタンスごとに 1 つの接続を作成し、ライフサイクルを「セッション」に定義することができます。これにより、新しいセッションごとに新しい ServerMethod のクラス インスタンスが生成され、この方法では、サーバー メソッドの記述方法について心配する必要はありません。これらのメソッドは常に独自の「排他的」接続を持つためです。

于 2014-05-22T20:47:43.480 に答える