Когда целесообразно использовать EAR и когда ваши приложения будут в WARs?

У нас есть много веб-приложений Spring, которые можно сделать на сервере WebLogic, и вам интересно, когда ВОЙНЫ должны идти в EAR и когда они должны существовать только как WAR. Случайно, ВОЙНЫ должны будут обращаться к общим логическим JAR, но я не понимаю, почему они должны были бы войти в EAR, когда их можно было просто упаковать в WAR.

Из того, что я понимаю, если несколько WARs находятся в EAR, и вам нужно изменить одну из этих WAR, вам нужно перераспределить весь EAR для обновления сервера. Это приведет к отказу всех WAR. Однако, если они не были в EAR, я мог бы просто обновить одну WAR, и это будет единственный, кто откажет.

Что случилось с наличием 100 разных файлов WAR, стоящих в одиночестве и с использованием пакетов JAR и разделяемых библиотек (с использованием WebLogic)?

Спасибо за понимание!

Ответы

Ответ 1

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

EARs необходимы, однако, при работе с полными приложениями JavaEE/J2EE, которые используют ресурсы WARs, EJB, JMS, JCA и т.д. Взаимодействия и зависимости между компонентами этих приложений значительно проще в управлении EAR.

Но если все, что вы используете Weblogic for, является контейнером WAR, то вы также можете использовать контейнер сервлета ванили, такой как Tomcat или Jetty, для всего функционального использования, которое вы получаете из Weblogic.

Ответ 2

Я согласен с почти всем скаффманом (обычно) на комментариях.

Если вы используете Spring без EJB, вы можете придерживаться файла WAR, конечно. Нет необходимости в EAR, который я вижу.

Однако, если ваше приложение Spring использует POJO, управляемые сообщениями, я могу увидеть, где вы все еще будете использовать WAR файл в WebLogic, чтобы воспользоваться JMS.

EAR может потребоваться, если у вас есть EJB или JCA, но я бы не сказал, что JMS назначает EAR. Я использовал JMS и развернул WAR файл в WebLogic, и он работал нормально.

Если вы решите пойти с Tomcat и развернуть WAR там, вы можете сохранить JMS-функциональность, если используете ActiveMQ.

Ответ 3

Аргумент для упаковки нескольких WAR в EAR может быть убедителен, если вы столкнетесь с ситуацией, которую совершил мой последний работодатель, где у вас есть общий набор JAR-библиотек, которые используются несколькими WAR, и размер этой коллекции JARs значительны. В нашей конкретной ситуации общий размер 3 WAR с общими JAR, упакованными в каждую WAR, составлял 124 МБ. Располагая JAR в содержащем EAR и настраивая путь класса каждой WAR для использования этих JAR, размер EAR, содержащий 3 WAR, был уменьшен до 40 МБ. Я бы счел это веской причиной.

Ответ 4

Наличие нескольких разделяемых библиотек скорее не должно быть веской причиной для EAR, поскольку JAR (или набор JAR) всегда может быть развернут как "библиотека" в weblogic, который поэтому может быть разделен всеми WAR, Не правда ли?

Ответ 5

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

Это, однако, представляет проблему, что происходит, когда вы избегаете сложности EAR и делитесь банкой, добавляя ее на сервер приложений? Гораздо более распространенный в войне только команда, разгружает все виды сложностей приложений на сервер приложений. Просто потому, что его было проще реализовать, в их часто перераспределенном расписании. Я не обвиняю их в этом вообще, но теперь у нас есть новая проблема. Стандартный сервер приложений нельзя использовать, вы должны выполнить настройку на стороне системы. Эффективно веб-приложение кровоточит по всей системе. Человек, который поддерживает сервер приложений, теперь ДОЛЖЕН также знать специфические для приложения детали... в корпоративной среде, это представляет собой очень ясную проблему.

Затем разработчики могут взять на себя системную ответственность, но они все равно должны соблюдать предельные сроки. Они неизбежно истекают кровью по всей ОС, и внезапно разработчики являются единственными возможными админами. Если администратор не знает, что приложение использует системную сторону, они могут очень сильно вызвать серьезные проблемы. Эти нечеткие линии всегда заканчиваются пальцами, указывающими в обоих направлениях, неизвестными состояниями системы и изолированностью команды.

Нужно ли им использовать EAR? Нет, я системный инженер, поэтому я всегда говорю, что они могут развернуть свой собственный сервер приложений, как другое коммерческое приложение. Внутри RPM, если развертывание WAR похоже на другие поддерживаемые серверы приложений, то они получают конвейер развертывания WAR. Если нет, то RPM все в одном... Не позволяя команде экстернализировать свои затраты, тогда EAR становятся БОЛЬШЕЙ идеей.