JAX-WSリファレンス実装(Metro)では、の作成JavaWebService
は安価です(生成されたクライアントでは、これには約20ミリ秒かかる傾向があります)。
の最初の作成SomePort
は非常に高価です(私たちにとっては約200ms)。getSomePort()
同じインスタンスでの後続の呼び出しJavaWebService
は大幅に高速です(約3ミリ秒)。
したがって、JavaWebService
取得する必要があるたびに作成する実装にはSomePort
、ある程度の費用がかかります。要するに、質問への答えは「かなり高価」です。
ただし、上のメソッドSomePort
はスレッドセーフではありませんが、上のメソッドはスレッドセーフJavaWebService
です。したがって、賢明な使用パターン(少なくともMetroでは、仕様がやや不足しているため、スレッドセーフは実装固有です)は、高価な呼び出しが1回JavaWebService
だけ発生するため、再利用することです。getSomePort()
アップデート
これは、OracleGermanyの従業員であるAndreasLeowによる2つの投稿と一致します。これは、以下のコメントで@PapaLazarouが参照しているスレッドの投稿者の1人で、Service
オブジェクトに関して次のように書いています。
Service
WSDLごとに1つの静的インスタンスのみを作成できます。単一のService
オブジェクトは完全にスレッドセーフであり、必要な数の同時スレッドで共有できます。
ポートの使用法については、
CXF JAX-WSポートはスレッドセーフであるとほぼ100%確信していますが、MetroのPort
オブジェクトは間違いなくスレッドセーフではありません。