В эталонной реализации JAX-WS (Metro) создание JavaWebService
стоит недорого (у наших сгенерированных клиентов мы склонны считать, что это занимает около 20 мс).
Первое создание SomePort
довольно дорого (около 200 мс для нас); последующие вызовы getSomePort()
в том же экземпляре JavaWebService
выполняются значительно быстрее (для нас это примерно 3 мс).
Таким образом, реализация, которая создает JavaWebService
каждый раз, когда ей нужно получить SomePort
, будет нести определенную степень затрат. Короче говоря, ответ на вопрос «довольно дорого».
Однако, хотя методы SomePort
не являются поточно-ориентированными, методы JavaWebService
являются. Таким образом, разумный шаблон использования (по крайней мере, с Metro - потокобезопасность зависит от конкретной реализации из-за отсутствия спецификации) - это повторное использование JavaWebService
, поскольку дорогой вызов getSomePort()
будет выполняться только один раз.
Обновление
Это согласуется с двумя постами Андреаса Леоу, сотрудника Oracle в Германии, одного из постеров в ветке, на которую ссылается @PapaLazarou в комментарии ниже, который написал относительно объекта Service
,
Вы можете создать только один статический Service
экземпляр для каждого WSDL: любой отдельный Service
объект полностью поточнобезопасен и может совместно использоваться любым количеством одновременно работающих потоков.
и про использование портов
Хотя я почти на 100% уверен, что порты CXF JAX-WS являются поточно-ориентированными, объекты Metro Port
определенно не поточно-безопасны.