3

他のいくつかの投稿と、JAX-WS Web サービスに関する私の理解から、それらはスレッドセーフではないことを理解しています。私の Web サービスは何百ものクライアントから呼び出され、1 秒あたり約 200 のトランザクションを処理できる必要があります。

私の Web サービスはデータベースとやり取りしてその作業を実行します。データベースにアクセスするコードの周りに synchronized キーワードを導入すると、一度に 1 つのスレッドのみがデータベースにアクセスするようになります。この場合、必要なスループットを達成します。よろしくお願いします。

データベース アクセス作業を実際に別のクラスに移動し、そのクラスをメソッド レベルでインスタンス化するように言われました。これにより、synchronized キーワードを使用する必要がなくなり、スレッド セーフを実現できます。あれは正しいですか?

4

2 に答える 2

2

トランザクションとスレッド セーフが必要な場合、なぜ EJB を JAX-WS エンドポイントとして使用しないのでしょうか?

于 2012-07-13T17:14:06.227 に答える
1

アプリケーションに関する詳細情報が必要です。

一般的に-あなたが説明する場合のパフォーマンスのために+データベースアクセスをお勧めします。

  1. データベースを慎重に計画します - 可能/意味のあるインデックスを作成し、ビューを使用するなど...
  2. 適切なロック メカニズム (行ごとのロック) を備えたデータベースを使用するようにしてください。このようにして、2 つのリクエストが異なる行にアクセスする場合、テーブル全体のロックに苦しむことはありません。
  3. 取引はできるだけ短くしてください。EJB を使用している場合 - 「データの読み取り」メソッドのトランザクション スコープが Required または RequiredNew でないことを確認します (これにより、トランザクションが開かれる可能性があります)。
  4. 同期を使用する場合は、適切なロックを慎重に使用してください。コーディングが最も簡単なため、「同期」を自動的に使用する誘惑に駆られないでください。可能であれば、ReaderWriterLock の使用を検討してください。
  5. 可能な場合はキャッシュの使用を検討してください。ただし、フローが「関連する」データで機能するように、慎重に計画してください。

これらの指示から始めてください。このようにパフォーマンス目標を達成できることがわかると思います。

于 2012-07-13T17:52:10.553 に答える