JAX-WSリファレンス実装(Metro)では、JavaWebService
の作成は安価です(生成されたクライアントでは、これは約20msかかります)。
SomePort
の最初の作成は非常に高価です(約200ms)。同じJavaWebService
インスタンス上のgetSomePort()
へのその後のコールは、実質的に速い(約3ms)。
したがって、SomePort
を取得する必要があるたびにJavaWebService
を作成する実装では、ある程度の費用がかかります。要するに、質問に対する答えは「かなり高価」です。
しかし、SomePort
のメソッドはスレッドセーフではありませんが、JavaWebService
のメソッドはあります。したがって、合理的な使用パターン(少なくともメトロスレッドセーフでは実装仕様が多少不足しているため)はJavaWebService
を再利用するのは、高価なgetSomePort()
コールを1度だけ実行することになります。
更新
これはService
オブジェクトについて書いたアンドレアスLeow、オラクルドイツから従業員、下記のコメントに@PapaLazarouが参照するスレッドでのポスターの一つ、によって2つのポスト、
と一致
WSDLごとにただ1つのスタティックService
インスタンスを作成できます。単一のService
オブジェクトは完全にスレッドセーフで、任意の数の同時スレッドで共有できます。
とポートの使用状況について、
私はCXF JAX-WSポートは、スレッドセーフであることをほぼ100%確信していますが、メトロのPort
オブジェクトは間違いないスレッドセーフです。
これについての参考情報はありますか?これまでに返されたポートはスレッドセーフではなく、CXFのページでは「クライアント」(私はそれらがポートを意味すると仮定していると仮定しています)はスレッドセーフではありません。私が探しているのは、メトロサービス(ポートではない)がスレッドセーフであること、特に 'getPort'を呼び出すことで個別のインスタンスが返されるという公式のステートメントです。 –
メトロ開発者がこれを示した数多くの投稿を見つけましたが、それらを再度見つけるのに苦労しました。私が最近見つけた唯一の記事は[this](http://metro.1045641.n5.nabble.com/JAX-WS-clients-td5709817.html)です。参考までに、私の独立した同時テストでも、これが該当することが示されました。 – PapaLazarou