Сгенерированные заглушки Axis2 поточнобезопасны? - PullRequest
16 голосов
/ 23 декабря 2009

Клиентские заглушки генерируются из WSDL поточно-ориентированным Axis2?

Конечно, «потокобезопасный» не обязательно является строго определенным термином, поэтому меня по крайней мере интересует следующее:

Доступны ли разные экземпляры одного и того же класса-заглушки для разных потоков одновременно с таким же эффективным поведением, что и однопоточное выполнение?

Является ли один экземпляр одного и того же класса-заглушки доступным одновременно для разных потоков, с тем же эффективным поведением, что и одни и те же вызовы, чередующиеся каким-то произвольным образом в однопоточном выполнении?

Вы также можете использовать терминологию, описанную здесь (и начинающуюся здесь ), чтобы обсудить это более точно.

Ответы [ 3 ]

17 голосов
/ 02 января 2010

Я не уверен насчет axis2, но, по крайней мере, axis1 генерирует заглушки, не поддерживающие потоки. У меня сложилось впечатление, что практически все другие SOAP-клиенты также не являются поточно-ориентированными. Если я правильно помню, проблема была в том, что клиентская заглушка использовала библиотеку синтаксического анализа XML без использования потоков.

Использование apache commons-pooling для объединения экземпляров и использование каждого из одного потока одновременно работало хорошо.

Обновление: для Axis2 см. https://issues.apache.org/jira/browse/AXIS2-4357 (заявляет, что Axis2 не является поточно-ориентированным, в соответствии с дизайном)

2 голосов
/ 28 декабря 2009

Эти заглушки не сохраняют состояния, что позволяет повторно использовать экземпляры заглушек. Не могли бы вы рассказать о проблеме, с которой вы столкнулись в Axis2. Люди обычно рекомендуют Xfire поверх Axis.

1 голос
/ 11 января 2010

Полагаю, я попытаюсь ответить на свой вопрос, предоставив некоторую обновленную информацию о дальнейших исследованиях, которые я проводил. Похоже, что по умолчанию более старые версии заглушек Axis2 могли быть только «совместимыми с потоками» (не может одновременно выполнять вызовы на одном и том же экземпляре заглушки из нескольких потоков - но вызовы к разным экземплярам в порядке).

См. Например:

http://markmail.org/message/3lu7x7pfo47vgnck http://markmail.org/message/sljyf6lpecxqllgx

Вы можете столкнуться с некоторыми утечками сокетов и их исчерпанием, если вы не вызовете cleanup / cleanupTransport в соответствии с этим потоком и многими другими связанными с ним:

http://issues.apache.org/jira/browse/AXIS2-3670

В некоторых случаях, по крайней мере, базовый HttpClient теперь кажется поточно-ориентированным, но в зависимости от того, как вы сгенерировали клиент, полная заглушка может быть не такой:

http://amilachinthaka.blogspot.com/2009/05/improving-axis2-client-http-transport.html

...