Варианты связи между WAR в одном EAR - PullRequest
6 голосов
/ 11 декабря 2008

Какие варианты у вас есть для связи между WARs в EAR? У нас есть несколько WAR, предоставляющих различные веб-сервисы, развернутые в одном EAR. Для выполнения своих задач им необходимо общаться с другими войнами. Конечно, они могли общаться с помощью веб-сервисов. Какие еще, возможно, более эффективные варианты есть?

РЕДАКТИРОВАТЬ: причина связи заключается в том, что модули используют некоторые общие функциональные возможности, и мы хотим разместить эти функциональные возможности только в одном месте, так как это требует значительного количества ресурсов. Также для этого требуется синхронная связь.

Ответы [ 4 ]

1 голос
/ 11 мая 2009

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

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

Если клиент службы и сама служба находятся внутри одного и того же уха, вы можете избежать некоторых накладных расходов, вызвав службу «напрямую», например, используя функцию родительского контекста Spring: http://springtips.blogspot.com/2007/06/using-shared-parent-application-context.html но я бы посоветовал не сводить на нет услугу, потому что вы потеряете различные преимущества, которые дает обслуживание, в первую очередь, такие как управление, управляемость и т. д.

1 голос
/ 11 декабря 2008

Поскольку ваши изменения, по-видимому, подразумевают, что обмен данными между WARS фактически не требуется, но оба должны иметь доступ к одним и тем же общим ресурсам. Простейшим решением было бы поместить файлы JAR для этого ресурса в EAR и добавить зависимость для этих файлов JAR в оба веб-проекта, чтобы они использовали общий ресурс.

Если в обоих веб-проектах есть код с отслеживанием состояния, который необходимо обновить, то единственный вариант - вызвать сервлет для веб-проекта (при условии, что код с состоянием содержится в веб-проекте).

Просто помните, что общий ресурс должен быть потокобезопасным.

Подобный вопрос здесь .

0 голосов
/ 11 декабря 2008

Почему бы не поместить общие классы в JAR и работать с ними напрямую? Или чуть более тяжелый вес делают обычные сессионные классы бобов?

0 голосов
/ 11 декабря 2008

На ум приходят две вещи

  1. Есть JMS для отправки сигналов.
  2. EJB может записывать общую информацию.
  3. Библиотека lib в каталоге lib EAR.

Если вам просто нужны общие методы, 3 - это то, что вам нужно. Но ваши точки редактирования говорят мне, что у вас есть общая функциональность, которая работает с общими данными. Например, у вас есть пользовательские записи, которые доступны и обновляются как WAR. Если это так, вы хотите EJB.

...