В чем разница между Tomcat, JBoss и Glassfish?

445

Я начинаю изучать Enterprise Java, и в книге, в которой я следую, упоминается, что она будет использовать JBoss. Netbeans поставляется с Glassfish. Я использовал Tomcat в прошлом.

Каковы различия между этими тремя программами?

samoz
источник
70
Эти вопросы являются «проклятием» с открытым исходным кодом. Иногда бывает слишком много вариантов, которые делают почти одно и то же. Для новичков это может привести к параличу путем анализа. Eclipse является доминирующей IDE, но почти все книги, которые стоит покупать, используют netbeans для разработки и обучения. Он использует Glassfish, когда я видел, что большинство компаний используют Jboss в реальной жизни. Существуют кривые изучения использования каждого контейнера, и это может быть очень сложно для новичков.
user798719
Теперь JBoss известен как [WildFly] ( en.wikipedia.org/wiki/WildFly ), а JBoss была компанией, разработанной WildFly.
Chaminda Bandara
Аналогичный вопрос: веб-профиль Java EE против полной платформы Java EE
Бэзил Бурк,

Ответы:

516

Tomcat - это просто контейнер сервлетов, т.е. он реализует только сервлеты и спецификацию JSP. Glassfish и JBoss являются полными серверами Java EE (включая такие, как EJB, JMS, ...), причем Glassfish является эталонной реализацией последнего стека Java EE 6, но JBoss в 2010 году еще не полностью его поддерживал.

Петар минчев
источник
77
Примечание для читателей: JBoss теперь сертифицирован как Java EE 6 Full Profile, как GlassFish. Кроме того, Tomcat теперь является веб-профилем Java EE 6, сертифицированным через TomEE, и поддерживает EJB, CDI, JSF, JPA и другие.
Дэвид Блевинс
10
@DavidBlevins, так в чем же разница?
aldo.roman.nurena
23
@ aldo.roman.nurena Очень мало различий. GlassFish и JBoss поддерживают полный профиль Java EE, поэтому они поддерживают устаревшие технологии, такие как JAX-RPC и CORBA. Мы не включили их в версию Tomcat для Java EE, но есть все современные технологии, такие как JAX-RS, JAX-WS, JMS, CDI, JPA, JSF, EJB, JTA и т. Д.
Дэвид Блевинс,
@DavidBlevins Если мы хотим выбрать между JBoss и Glassfish, что лучше для производственной среды? Есть ли справочная информация, чтобы понять это?
Судхакар Чавали
1
Редактирование в stackoverflow - это верный способ исправить ответы, которые слишком далеки от реальности.
Уоррен П
358

Tomcat - это просто сервер HTTP и контейнер сервлетов Java. JBoss и GlassFish являются полнофункциональными серверами приложений Java EE, включая контейнер EJB и все другие функции этого стека. С другой стороны, Tomcat имеет меньший объем памяти (~ 60-70 МБ), тогда как эти серверы Java EE весят сотни мегабайт. Tomcat очень популярен для простых веб-приложений или приложений, использующих такие среды, как Spring, для которых не требуется полноценный сервер Java EE. Администрирование сервера Tomcat, возможно, проще, поскольку в нем меньше движущихся частей.

Однако для приложений, которым требуется полный стек Java EE (или, по крайней мере, больше компонентов, которые можно легко прикрепить к Tomcat) ... JBoss и GlassFish - два наиболее популярных предложения с открытым исходным кодом (третье - Apache Geronimo , на которой построена бесплатная версия IBM WebSphere). JBoss имеет более обширное и глубокое сообщество пользователей и более зрелую базу кода. Тем не менее, JBoss значительно отстает от GlassFish в реализации текущих спецификаций Java EE. Кроме того, для тех, кто предпочитает систему администрирования на основе графического интерфейса ... Консоль администратора GlassFish чрезвычайно удобна, в то время как большая часть администрирования в JBoss выполняется с помощью командной строки и текстового редактора. GlassFish поставляется непосредственно от Sun / Oracle, со всеми преимуществами, которые могут предложить. JBoss НЕ находится под контролем Sun / Oracle, со всеми преимуществами, которые может предложить.

Стив Перкинс
источник
3
Я не проверял, но некоторые утверждают, что для обычного проекта контейнер EE 6 может использовать на 25% меньше памяти, чем Spring + его зависимости.
Арджан
2
+1, отличный ответ, хотя я подписываюсь на комментарий @ Arjan: на самом деле память, используемая самими этими серверами, не так важна по сравнению с тем, сколько памяти потребуется развернутому приложению (и это сильно зависит от используемых технологий. Spring несколько боров памяти)
Shivan Dragon
10
Хех ... обсуждение "контейнеров сервлета" и "серверов JEE" всегда превращается в обсуждение "весны" против "EJB / JSF". Я использовал JEE в течение многих лет, и всегда рад сделать это, когда клиент платит мне. Однако мои мысли таковы: [1] большинство тестов с обеих сторон исходят из предвзятых источников, я никогда не замечал большой разницы в ресурсах между двумя стеками сам, [2] Spring НАМНОГО более портативен, чем «стандарты» JEE, с которыми переключать серверы всегда кажется болезненным, и последнее, но не менее важное ...
Стив Перкинс,
7
... [3] сообщества пользователей для Spring и Hibernate абсолютно не похожи на сообщества чистых спецификаций JEE. Если вы столкнетесь с проблемами в Spring и опубликуете вопрос в StackOverflow, его прочтут сотни людей, и вы получите надежный ответ в течение нескольких минут. Задайте вопрос о материалах JEE, и он будет прочитан дюжиной человек ... и половину времени единственный ответ, который вы получите, - "Это сработало для меня!". Стандарты JEE всегда кажутся однодневными с опозданием и коротким долларом, и я чувствую себя очень одиноко, когда сталкиваюсь с ними в реальном приложении.
Стив Перкинс
1
Умммм ... По состоянию на прошлый год у Tomcat было всего 13 МБ, у GlassFish 53 МБ, а у JBoss 127 МБ. Я бы не стал рассматривать эти серверы JavaEE (GlassFish и JBoss) сотнями мегабайт. Если вы говорите о WebLogic или WebSphere, то речь идет о ГБ. Информация найдена на zeroturnaround.com/rebellabs/…
j будет
81

Вы должны использовать GlassFish для корпоративных приложений Java EE . Некоторые вещи для рассмотрения:

А веб - сервер означает: Обработка HTTP - запросы (обычно от браузеров).

Контейнер сервлетов (например , Tomcat ) означает: Он может обрабатывать сервлеты & JSP.

Сервер приложений (например, GlassFish ) означает: * Он может управлять приложениями Java EE (обычно сервлетами / JSP и EJB).


Tomcat - управляется сообществом Apache - открытым исходным кодом и имеет два вида:

  1. Tomcat - веб-профиль - легкий, который является только контейнером сервлета и не поддерживает функции Java EE, такие как EJB, JMS и т. Д.
  2. Tomcat EE - это сертифицированный контейнер Java EE, поддерживающий все технологии Java EE.

Коммерческая поддержка недоступна (только поддержка сообщества)

JBoss - Run by RedHat Это полная поддержка стека для JavaEE и это сертифицированный контейнер Java EE. Это включает в себя Tomcat в качестве веб-контейнера внутри. Это также имеет два вкуса:

  1. Версия сообщества под названием Application Server (AS) - будет иметь только поддержку сообщества.
  2. Enterprise Application Server (EAP) - для этого вы можете иметь лицензию на основе подписки (она зависит от количества ядер, имеющихся на ваших серверах).

Glassfish - под управлением Oracle Это также сертифицированный Java EE-контейнер с полным стеком. Это имеет свой собственный веб-контейнер (не Tomcat). Это происходит от самого Oracle, поэтому все новые спецификации будут сначала протестированы и реализованы с помощью Glassfish. Таким образом, всегда будет поддерживать последние спецификации. Я не в курсе его моделей поддержки.

Джаймин Патель
источник
2
Могу ли я сказать, что в настоящее время (1 квартал 2018 года) Glassfish на самом деле не играет большой роли в реальности? Разве де-факто не является стандартным JBoss?
Сократ
14

В состав jboss и glassfish входит контейнер сервлетов (например, tomcat), однако два сервера приложений (jboss и glassfish) также предоставляют контейнер bean-компонентов (и некоторые другие вещи, как я себе представляю)

ним чимпский
источник
2
Glassfish может делать все, что может Tomcat, но это не значит, что он «включает» Tomcat. Glassfish имеет свой собственный веб-контейнер.
Мартин
5
Чтобы быть более понятным, «like tomcat» является правильным, но JBoss фактически встраивает Tomcat для реализации его контейнера сервлета.
Чаки
@ Чаки больше нет
НимЧимпски
8

JBoss и Glassfish в основном являются полноценным сервером приложений Java EE, тогда как Tomcat - это всего лишь контейнер сервлетов. Основное различие между JBoss, Glassfish, а также WebSphere, WebLogic и т. Д. В отношении Tomcat, а также Jetty, заключалось в функциональности, которую предлагает полный сервер приложений. Когда у вас был сервер приложений Java EE с полным стеком, вы можете воспользоваться всеми преимуществами реализации поставщика по вашему выбору, а также EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet и, конечно же, и так далее. С Tomcat, с другой стороны, вы можете воспользоваться только JSP / Servlet. Однако на сегодняшний день с такими продвинутыми платформами, как Spring и Guice, многие из основных преимуществ использования сервера приложений с полным стеком могут быть смягчены, и при условии, что один из этих фреймворков будет реализован исключительно в среде Spring Ecosystem,

Валерио Вауди
источник
8

Кажется, немного разочаровывает использование Tomcat, когда вы читаете эти ответы. Однако больше всего не упоминается то, что вы можете использовать идентичные или почти идентичные варианты использования с tomcat, но для этого необходимо добавить необходимые библиотеки (через Maven или любую другую систему, которую вы используете).

Я работал с Tomcat с JPA, EJB с очень небольшими усилиями по настройке.

user2130951
источник
1
@ MarcoOttina По моему опыту, да. Это настраиваемый веб-сервер. Я предполагаю, что многие люди, создающие современные веб-приложения, используют его вместе с Spring / Spring Boot. За все мои годы с Java я все еще смущен экосистемой (особенно всеми вещами JEE), поскольку у меня никогда не было никаких требований для этого. Следовательно, заканчивая здесь сегодня :)
jocull
4

И JBoss, и Tomcat являются серверами приложений Java-сервлетов, но JBoss - намного больше. Существенная разница между ними заключается в том, что JBoss предоставляет полный стек Java Enterprise Edition (Java EE), включая Enterprise JavaBeans и многие другие технологии, которые полезны для разработчиков, работающих над корпоративными приложениями Java.

Tomcat гораздо более ограничен. Можно подумать, что JBoss - это стек Java EE, который включает в себя контейнер сервлетов и веб-сервер, тогда как Tomcat, по большей части, является контейнером сервлетов и веб-сервером.

спартанский
источник
3

Apache tomcat - это единственный серверный контейнер, который он не поддерживает для приложения Enterprise Java (JEE). JBoss и Glassfish поддерживают приложение JEE, но Glassfish намного тяжелее сервера JBOSS: Reference Slide

БЭТМЕН_
источник