Вопрос

В последнее время я читал / узнавал больше о Spring и о том, как можно было бы использовать Spring в сочетании с другими инструментами с открытым исходным кодом, такими как Tomcat и Hibernate.Я оцениваю, может ли Spring MVC быть возможной технологией замены для проекта, над которым я работаю, который использует WebLogic и МНОГО пользовательского кода Java EE.Дело в том, что я всегда подозревал, что наше решение перегружено разработкой и намного сложнее, чем должно быть.Удивительно, но сейчас 2009 год, и все же мы пишем наши собственные классы для обработки транзакций и объединения потоков.И это не похоже на Amazon, eBay или Google, если вы понимаете, что я имею в виду.Таким образом, я исследую вариант "чем проще, тем лучше".

Итак, вот мой вопрос:Я хотел бы услышать мнения о том, как вы принимаете решение о необходимости полномасштабного сервера приложений Java EE или нет.Как вы "измеряете" размер / нагрузку / спрос в приложении Java EE?Количество одновременно работающих пользователей?Общее количество ежедневных транзакций?Насколько "тяжелым" должно стать приложение, прежде чем вы поднимете руки в знак капитуляции и скажете: "О'кей, Tomcat просто не справляется с этим, нам нужен JBoss / WebLogic / WebSphere"?

Это было полезно?

Решение

Я не думаю, что решение использовать полноценный сервер Java EE или нет должно основываться на количестве пользователей или транзакций. Скорее это должно основываться на том, нужна ли вам функциональность.

В моем текущем проекте мы на самом деле переходим от JBoss к обычному Tomcat, потому что мы поняли, что в любом случае не используем какую-либо функциональность Java EE, кроме базовых сервлетов. Мы, однако, используем Spring. Между базовым управлением объектами Spring, обработкой транзакций и возможностями JDBC мы не видим острой необходимости в EJB. В настоящее время мы используем Struts 2, а не Spring MVC, но я слышал об этом много хорошего. В любом случае, Spring хорошо интегрируется с рядом веб-фреймворков Java.

Другие советы

Spring не пытается заменить некоторые расширенные части спецификации JavaEE, такие как JMS и JTA. Вместо этого он опирается на них, делает их совместимыми с «Spring way» и вообще упрощает их использование.

Если вашему приложению требуются возможности, подобные JMS и JTA, вы можете легко использовать их через Spring. Не проблема с этим.

Google открывает множество источников своего кода. Если вы пишете вещи низкого уровня самостоятельно, вместо того, чтобы реализовывать уже написанный код, вы часто задумываетесь над проблемой.

Возвращаясь к актуальному вопросу, немало Walmart.com, etrade.com, The Weather Channel и другие просто используют Tomcat. Парни из IBM по маркетингу и продажам, возможно, заставят вас поверить в другое, но для Tomcat нет никаких ограничений.

За исключением EJB, я не уверен, чего не хватает в Tomcat, и я не фанат EJB.

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

Вы хотели бы сделать это по крайней мере по двум причинам:

<Ол>
  • Производительность; Вы обнаруживаете, что одна коробка, которая обрабатывает все, загружает коробку слишком много. Разделение разных слоев на разные блоки позволит вам масштабироваться. Сессионные бины также могут загружать баланс на более мелком уровне. Tomcat и другие подобные веб-сервисы не имеют кластеризации из коробки.
  • Гибкость; Теперь, когда вы перенесли свою бизнес-логику в собственную среду, вы можете разработать альтернативный интерфейс, который бы использовал тот же уровень, но, скажем, был, например, интерфейсом с толстым клиентом. Или, возможно, другие контексты хотели бы использовать сессионные компоненты.
  • Хотя я, вероятно, должен указать, что если вы используете веб-сервисы для связи с этим средним уровнем, он также может быть на tomcat!

    Единственная причина использовать полноценный сервер Java EE - если вам нужны распределенные транзакции XA, если вам не нужны транзакции XA, вы можете использовать Spring + JPA + Tomcat + Bean Validation + JSTL + EL + JSP + Java почта.

    Сервер Java EE также должен реализовывать JMS, но не имеет смысла запускать сервер JMS в той же виртуальной машине, что и остальная часть сервера приложений, поэтому, если вам нужен JMS, у вас должен быть отдельный сервер JMS.

    Я категорически не согласен со всеми ответами, приведенными здесь.

    В Tomcat можно добавить все, включая EJB, CDI, JTA, проверку бинов, JAX-RS и т. д.

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

    Давайте проясним: никто не использует только Tomcat! Каждый всегда добавляет веб-фреймворк, контейнер ioc, orm, менеджер транзакций, веб-сервисы и т. Д. И т. Д.

    Облегченные серверы Java EE, такие как TomEE, уже включают все это и позволяют полностью интегрировать все эти возможности.

    Может быть, это может представлять интерес:

    http://onjava.com/onjava/2006/02/08/j2ee-without-application-server.html

    HTH

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top