Как загрузить несколько веб-сервисов jax-ws в один контейнер Spring - PullRequest
1 голос
/ 21 июля 2010

Мы работаем над проектом SOA, состоящим из нескольких веб-сервисов.

Каждый веб-сервис основан на Metro JAX-WS Framework и внутренне использует spring и hibernate. Каждый веб-сервис загружается как веб-приложение внутриотдельный пружинный контейнер.

Это означает, что наша архитектура развертывания состоит из нескольких веб-приложений, каждое из которых запускает отдельную службу.

Однако мы сталкиваемся с некоторыми проблемами производительности, поскольку каждое веб-приложение загружает свое собственноеконтейнер пружин / фабрика сеансов гибернации.

Возможные альтернативы:

  1. Один контекст одной пружины веб-приложения
  2. Несколько контекстов одной веб-приложения

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

1 Ответ

1 голос
/ 21 июля 2010

«Лучшее» в «лучшей архитектуре» весьма субъективно, поскольку зависит от вашей текущей архитектуры, которую вы не очень хорошо определили.

Однако у меня есть несколько предложений:

  1. Рассмотрим влияние на обслуживание, которое будет иметь консолидация всей бизнес-логики, связанной с вашими сервисами, в одном веб-приложении, не говоря уже о всех настроенных компонентах, которые вам придется перепутать для повторного использования. учитывать все ваши услуги. В этом смысле хранение отдельных веб-приложений имеет тенденцию быть лучше в соответствии с моим опытом.

  2. Рассмотрите возможность перемещения фабрики сеансов гибернации из каждого сервиса в централизованное расположение, например, в JBoss вы можете создать некоторый тип «интерфейса гибернации» в виде файла .HAR для каждого сервиса. нужно будет только «попросить» сеанс гибернации. Может быть, вы могли бы сделать что-то подобное на вашем конкретном сервере приложений. Существует несколько шаблонов для эффективного извлечения сеанса Hibernate, которые применяются здесь.

  3. Большинство проблем с производительностью веб-служб также связаны с их использованием, синхронизацией или асинхронностью. Мы решили одну такую ​​проблему в моей компании, внедрив системы сообщений под прикрытием для асинхронной обработки запросов веб-служб. Когда запрос поступает, вы помещаете их в очередь, существуют другие службы, ожидающие обработки запросов определенных типов. Это может быть легко реализовано с помощью Spring и ActiveMQ.

На данный момент этого достаточно.

Привет.

...