Многократная производительность WebServiceTemplate и SaajSoapMessageFactory

Я пытаюсь улучшить производительность запуска существующего приложения. В настоящее время это приложение выполняет сервисные вызовы для других 8 приложений, поэтому существует 8 сервисных компонентов, расширяющих WebServiceGatewaySupport. Каждый из этих служебных компонентов имеет свой собственный экземпляр SaajSoapMessageFactory.

<bean id="serviceBean" class="com.test.ServiceBeanA" scope="prototype"
      p:marshaller-ref="marshaller"
      p:unmarshaller-ref="marshaller"
      p:defaultUri="${service.endpoint}"
      p:messageSender-ref="messageSender">
    <constructor-arg ref="**messageFactoryD**"/>

</bean>

Мне было интересно, если это необходимо, или я могу использовать только один экземпляр messageFactory для всех моих служебных компонентов. Я не уверен, что мне нужно беспокоиться о блокировке при обработке сообщений. Причина, по которой я рассматриваю это как начало, состоит в том, что на каждый запуск SaajMessageFactory "Создание SAAJ 1.3 MessageFactory .." уходит несколько секунд.

На аналогичном замечании есть также один экземпляр Jaxb2Marshaller для каждого служебного компонента. Могу ли я использовать только экземпляр Jaxb2Marshaller для всех и комбинировать пути контекста.

1 ответ

Решение

Фабрики сообщений SAAJ и контексты JAXB являются неизменяемыми и поточно-ориентированными, поэтому нет причин, по которым вы не могли бы использовать одни и те же экземпляры для всех служебных компонентов. Обратите внимание, что я не верю, что создание фабрик сообщений SAAJ занимает значительное время. С другой стороны, создание JAXB-контекстов может быть тяжелым, в зависимости от количества классов.

Другие вопросы по тегам