2

JAXWSを使用してWebサービスクライアントを生成しました。JAXWSクライアントを使用する場合、クラスService*PortTypeクラスのインスタンス化に時間がかかることに気付きました。そのため、リクエストを行う必要があるたびにクラスServiceとクラスをインスタンス化することはお勧めできません。*PortType

  • Serviceおよび*PortTypeクラスをWebアプリケーション全体に対してグローバルにするのは安全ですか?その長所と短所は何ですか?
  • 要求/応答が別の要求/応答に切り替わる可能性はありませんか?
  • サービスでメソッドを呼び出すと、新しい接続が作成されますか?それとも単に古い接続を再利用するのでしょうか?
  • 古い接続を再利用しているだけの場合は、スレッドの問題がある可能性がありますか?

port.calculate(requestParam)また、ポートがグローバル変数であるコードを考えると、多くのスレッドが同時にcalculate()メソッドを呼び出した場合はどうなりますか?各スレッドは、計算呼び出しごとに新しいスレッドを作成しますか?または、次の呼び出しに進む前に、各呼び出しが終了するのを待ちますか?通話はどのように処理されますか?いくつかのリクエストとレスポンスが混ざってしまうのではないかと心配しています。

よろしくお願いします!

4

1 に答える 1

1

あなたは心配する権利があります。ポートはスレッドセーフではありませんが、作成に最も時間がかかるサービスはスレッドセーフです。これに関する公式のドキュメントはありませんが、ここに記載されており、このフォーラムの投稿では、同じポートでの複数のリクエストが文字化けしたリクエストを引き起こすことを示す実験が行われています。推奨されるアプローチは、リクエストを行うためにチェックアウトする単一のサービスとポートオブジェクトのプールを作成することです。もう1つの方法は、CXFを使用することです。これにより、クライアントオブジェクトがスレッドセーフになり、ドキュメント内のスレッド間で共有する方法がより明確になります。

于 2013-02-19T12:32:14.800 に答える