JavaRush/Java блог/Архив info.javarush/Обзор серверов приложений и, конечно же, Tomcat
eGarmin
41 уровень

Обзор серверов приложений и, конечно же, Tomcat

Статья из группы Архив info.javarush
участников
Дорогие джаварашовцы, что я хочу рассмотреть в этой статье? Я просто хочу сделать небольшой обзор той части серверов приложений, которые заслуживают внимания хотя бы тем, что являются бесплатными и доступен их исходный код. Я буду исходить из того, что ваша система сходна с моей. У меня стоит Windows 7 64 бита, кроме того у меня стоит JDK 1.7 и JDK 1.8, а переменная окружения JAVA_HOME ссылается на последний из них. В моем случае это значит, что в JAVA_HOME прописан путь C:\Program Files\Java\jdk1.8.0_31. Обзор серверов приложений и, конечно же, Tomcat - 1Чтобы у вас при повторении ниже описанного возникало как можно меньше вопросов типа «а почему у меня не получилось, может я что-то не так делаю?», я буду пытаться описывать каждое действие, которое я делал на своей машине. Начинаем…

Кастинг, т.е. отбор

Для начала нужно отобрать сервера приложений для нашего обзора. Для этого на википедии смотрим статью Comparison of application servers (англ., т.к. другой нет). Там есть табличка с кучей серверов приложений, но для нас интерес представляют только те, которые, с одной стороны, opensource, а с другой, поддерживают JavaEE по полной, т.е. столбец Java EE compatibility в этой таблице должен содержать строчку типа Full Platform. Из этого списка, в котором есть и WildFly, и JBoss сразу можно выкинуть последний, т.к. это просто старое название и старые версии WildFly. В результате получаем следующий список серверов, которые заслуживают нашего внимания:
  1. Glassfish (не проприетарный, а тот, что от сообщества glassfish.java.net, но который поддерживается корпорацией Oracle до такой степени, что если нужен javaEE SDK с сайта Oracle, то тебе впиндюрят и этот сервер приложений, иначе никак)
  2. (Red Hat) WildFly (бывший JBoss)
  3. (Apache) Geronimo
  4. (Apache) Tomcat (это лишь контейнер сервлетов, а не сервер приложений, но он является таким эталоном, на котором, если программа написана правильно, то она точно заработает. На других серверах программа может быть написана правильно с точки зрения JavaEE, но работать все равно будет не корректно или вообще не будет. Это я о Geronimo, о глюках которого можно говорить долго)
Теперь давайте накачаем этих серверов. Где было можно выбрать между 32-х и 64-хбитными версиями, я выбирал архивчик под мою систему в 64 бита.

Установка

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

Настройка

Настройку серверов начнем с настройки порта HTTP, на котором он будет работать. Потом пропишем себя как админа сервера. Для каждого из серверов есть свои особенности настройки. Для Tomcat. Заходим в папку с распакованным tomcat, далее папка conf, файл server.xml. Находим в этом файле число 8080 (http порт по умолчанию) и меняем его на что захотим. Я поставил 9713. Чтобы прописать себя как админа сервера нужно, находясь в этой же папке, открыть файл tomcat-users.xml. В нем перед закрывающим тегом </tomcat-users> прописать следующий тег <user username="egarmin" password="1" roles="manager-gui,manager-script,manager-status,manager-jmx"/> где в своей роли я прописал максимальное количество всяких админских прав (ролей). Это позволит мне деплоить приложения и через gui, и через удаленное подключение. Теперь запустим tomcat. Заходим в папку с распакованным tomcat, далее папка bin и запускаем файл startup.bat. Переходим в браузере по адресу http://localhost:9713. Должно все заработать и мы увидим тигру. TomcatТеперь давайте проверим наличие доступа в админку. Для этого переходим по адресу http://localhost:9713/manager, вводим выбранные логин и пароль и получаем доступ. Админка в TomcatУРА! Можно временно отключить Tomcat, для этого достаточно закрыть консоль, в которой он работает. Для Glassfish. Заходим в папку с распакованным glassfish, далее в подпапку glassfish, далее подпапка domains, потом в папку domain1. Заходим в папку config и находим файл domain.xml. Там также ищем число 8080 (это число вообще характерно в качестве http-порта по умолчанию для серверов приложений и контейнеров сервлетов) и меняем его на что захотим. Я поставил 9813. Запустим glassfish. Заходим в папку с распакованным glassfish, далее в подпапку glassfish, потом в папку bin. Запускаем файл startserv.bat. В браузере вводим адрес http://localhost:9813. На появившейся некрасивой странице с заголовком GlassFish Server находим ссылку go to the Administration Console и жмем на нее. Первый вход в GlassFishДалее, попав на красивую построенную на JSF страницу административной консоли, жмем пункт Change Administrator Password Админка в GlassFishи вводим нужный нам пароль для пользователя admin, потом подтверждаем его и жмем кнопку Save. Смена пароля в GlassFishПри последующих входах в административную консоль нужно будет указывать логин admin и заданный пароль. Вход в админку GlassFish по паролюТеперь можно временно отключить Glassfish, для этого достаточно закрыть консоль, в которой он работает. Для WildFly. Заходим в папку с распакованным wildfly. Далее заходим в папку standalone, потом папка configuration, а в ней файл standalone.xml. Далее действуем по отлаженной схеме. Я поставил порт 9913. Запустим сервер. Для этого перейдем в папку с распакованным wildfly. Далее заходим в папку bin и запускаем файл standalone.bat. Открываем браузер и вводим адрес http://localhost:9913. Первый вход в WildFlyЖмем ссылку Administration Console для входа в админскую консоль (проще говоря, админку сервера приложений). Но не тут-то было, т.к. всплывает экран. Первый вход в админку WildFlyЭтот экран сообщает нам, что админ не создан, и чтобы его создать нужно воспользоваться консольной утилитой add-user.bat. Ну, раз надо так надо. Возвращаемся в папку bin и запускаем эту утилиту. Вначале предложат выбрать тип пользователя, которого мы хотим создать. Надо выбрать пункт (a), что будет означать, что нам нужен админ. Потом запрашивается имя этого пользователя Username и пароль Password. Пустым пароль быть не может, но односимвольным – пожалуйста. Утилита конечно поругается, но проглотит, если ей ответить yes на вопрос «Вы уверены?». Далее подтверждаем пароль повторным вводом на запрос Re-enter Password. Потом будут еще вопросы, но на них все просто отвечаем утвердительно и выходим из утилиты. Вернувшись на страницу выше, находим ссылку Try Again и жмем на нее. Теперь, введя данные только что созданного админа, можно попасть в админку. Админка в WildFlyГасим сервер, закрыв окно консоли, через которую он был запущен. Для Geronimo. Заходим в папку с распакованным geronimo. Далее в подпапку var, потом в папку config, а в ней файл config-substitutions.properties. В этом файле описаны все используемые сервером приложений порты в удобном формате, но схема замены порта та же. Я поставил порт 10013. Запустим сервер geronimo. Перейдем в папку с распакованным geronimo, потом в подпапку bin и запустим там файл startup.bat. Переходим на страницу http://localhost:10013. Чтобы вы думали? Скорее всего, страницы там не будет. Почему? Все дело в том, последняя версия Geronimo (3.0) не может работать с последней версией JDK (1.8), поэтому если у вас стоит только она или пусть даже есть, скажем, 7-ая версия, но переменная окружения JAVA_HOME все равно ссылается именно на 8-ую, как у меня, то запуск сервера приложений не произойдет. Таким образом, для работы Geronimo нужно обязательно скачать JDK 1.7. Теперь допустим вы поставили 7-ой JDK, но не хотите менять значение переменной JAVA_HOME (в конце-то концов, другие программы на нее не жалуются, а значит пусть и работают с последней версией JDK). Что делать? Я советую открыть файл setjavaenv.bat, расположенный в той же папке bin, и найти в нем строку с меткой :okJdkFileCheck. После чего на следующей же строке добавьте переопределение переменной окружения. Например, так: set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_75Этой строки там нет, так что будьте добры прописать ее самостоятельно. Если у вас 32-битная система, то больше проблем быть не должно. Более того, если у вас 64-битная система и вы поставили JDK 1.7 именно в 64-битной комплектации, то у вас тоже все в шоколаде. А теперь представим, что мы решили извратиться и поставить на 64-х битную систему (у меня, например, Windows 7 64) JDK 1.7 из линейки в 32-ва бита. Что тогда? Тогда придется еще повозиться, потому как в 64-битной системе есть две папки для установки программ: Program Files и Program Files (x86) и если ничего не менять, то 32-хбитный JDK встанет именно в последнюю. Что в этом страшного? Да вроде ничего, однако, если переменная JAVA_HOME будет иметь в своем пути скобки (x86), то у Geronimo случается несварение. Почему? Черт его знает, особенно если учесть, что согласно данным с форумов, эту ошибку в 3-ей версии Geronimo должны были исправить. Но ни фига подобного. Главное в этом деле не делать пи-пи, если индейцы не исправили, то мы поправим. Для этого есть два способа, которые я предпочитаю комбинировать, чтобы уж наверняка. Во-первых, опять идем а файл setjavaenv.bat и находим уже упомянутую метку :okJdkFileCheck. Под этой меткой есть строка if "%JRE_HOME%" == "" if exist "%JAVA_HOME%\bin\javac.exe" (set JRE_HOME=%JAVA_HOME%\jre) else set JRE_HOME=%JAVA_HOME% в которой для излечения Geronimo достаточно будет взять подстроку JRE_HOME=%JAVA_HOME%\jre в кавычки, т.е. заменить всю строку на if "%JRE_HOME%" == "" if exist "%JAVA_HOME%\bin\javac.exe" (set "JRE_HOME=%JAVA_HOME%\jre") else set JRE_HOME=%JAVA_HOME%. Кроме того, помните или знайте, что у папок типа Program Files в системе Windows 7 есть синонимы (например, для папки C:\Program Files (x86) синонимом будет папка C:\Progra~2). Поэтому если вы в файле setjavaenv.bat после метки :okJdkFileCheck установите следующее значение переменной JAVA_HOME set JAVA_HOME=C:\Progra~2\Java\jdk1.7.0_75 то у вас тоже заработает сервер Geronimo под управление 32-х битного JDK в 64-х битной операционной системе. Как-то так… Ну, наконец-то, можно и запускать Geronimo, вызвав startup.bat. Теперь проблем быть не должно. Переходим в браузере на страницу http://localhost:10013. Слева вверху находим ссылку Console и жмем на нее. GeronimoНадо ввести админские логин и пароль. Сразу подскажу, что это пользователь system с паролем manager (значения по умолчанию). Вход в админку Geronimo по паролюПройдя в саму консоль и проследовав по пунктам меню как на картинке ниже (выбрать радиобатон Advanced, потом выбрать Security > Users and Groups), можно как сменить пароль для пользователя system, так и создать другого админского пользователя, а этого удалить. Смена пароля в GeronimoОстановить сервер Geronimo можно также простым закрытием окна консоли, в котором сервер был запущен.

Заключение

В этом обзоре я, по сути, просто провел установку и первоначальную настройку популярных серверов приложений и контейнера сервлетов Tomcat. За исключение Geronimo, остальные сервера были очень дружелюбны ко мне и проявили гостеприимство. В следующем посте я продолжу рассмотрение серверов приложений и сделаю 3-ий шаг на пути рассмотрения веб-сервисов, а именно, покажу как задеплоить описанный на первом шаге веб-сервис в эти сервера. Для этого мы создадим war-архив нашего веб-сервиса, и я наглядно покажу, что набор сторонних jar-ников, которые надо включать в этот архив для корректной работы сервиса, сильно меняется от сервера к серверу.
Комментарии (11)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Vladislav Osipenkov
Уровень 0
30 января 2020, 12:11
А следующая статья так и не вышла(деплой из идеи на сервера) или все же вышла, но нет ссылки на нее?
tanzwud
Уровень 34
4 апреля 2015, 18:01
Ничего против данного обзора но после «Кроме того, выкидываем Glassfish от Oracle, т.к. это не понятно что, когда есть такой же от сообщества.» Обзор можно было закончить ибо читать дальше смысла уже не было. Сперва автору статьи нужно разобраться в разнице между этими двумя контейнерами и где какой из контейнеров использовать а потом уже показывать свою точку зрения.
eGarmin
Уровень 41
5 апреля 2015, 00:05
Соглашусь с тем, что слишком вольно излагаю свою мысль, поэтому уточню, что я имел в виду, сказав про GlassFish от Oracle, что «это не понятно что». В топике также сделал UPD, чтобы более не вызывать недопонимание.

Cогласно википедии, проект GlassFish от Oracle уже довольно мертвый))), т.к. не обновляется 7.5 лет и поддерживает лишь 5-ую версию JavaEE. Свежие версии конкурентов уже поддерживают 7-ую версию JavaEE.

Кроме того, я сразу сказал, что выбирал только среди opensource проектов, т.к. объять необъятное невозможно, да я и не преследовал такую цель.
tanzwud
Уровень 34
5 апреля 2015, 04:09
Никакого негатива. На JavaRush много людей которые хотят научится писать програмы, прочитают потом будут плеватся на вобщем то хорошую тулзу.
Видимо википедию не обновляют -). 3я версия официально от oracle поддерживает ЕЕ6. EE7 Да не поддерживает уже. В 2017 будет EE8 если оракле сдержит обещание то некомерческий glassfish будет.
Почему то нету TomEE он open source и судя по коментам неплохо справляется с Java EE6.
Что касается проприетарности то насчет этого у каждого своё мнение. Однако простой пример. К примеру у вас есть два сервера. Один Glassfish у которого хозяин Oracle второй пусть будет WildFly который условно без хозяина, получим что. Оракловская тулза будет работать строго по спецификации, то есть прочитали JSRку и никаких сюрпризов, тогда как WildFly может без проблем однажды с этого пути свернуть и получите недокументированные возможности или проблемы.
Я конечно может где то и не прав. Но по возможности лучше писать приложение в соответствии со спецификацими к примеру Java EE а не под конкретный сервер. Тогда на выходе получается приложение которое работает с любым EE сертифицированым контейнером а proprietary в итоге значит всего лишь платный софт.
blacky
Уровень 23
5 апреля 2015, 04:31
Cогласно википедии, проект GlassFish от Oracle уже довольно мертвый))), т.к. не обновляется 7.5 лет и поддерживает лишь 5-ую версию JavaEE. Свежие версии конкурентов уже поддерживают 7-ую версию JavaEE.

Собственный продукт вы так же будете оценивать? Согласно вики-ссылочке автор давно статью не обновлял. На официальной странице написано, что Oracle GlassFish Server официально поддерживает Java EE 6. А whitepaper'ы датируются маем 2010. Поддержка Servlet 3.0, EJB 3.1 (JSR 318), JPA 2.0 (JSR 317) — мало что ли?

Да, коммерческая поддержка прекращена и Oracle официально об этом отписалась "Java EE and GlassFish Server Roadmap Update". Далее либо использовать open-source Glassfish, либо WebLogic -> 6 Facts About GlassFish Announcement ну или что душе угодно.

GlassFish is the reference implementation of Java EE and as such supports Enterprise JavaBeans, JPA, JavaServer Faces, JMS, RMI, JavaServer Pages, servlets, etc.

Т.е. это лучшая и наиболее полная реализация спецификаций JEE из всех имеющихся.
И фраза должна звучать так: «Что работает на GlassFish ДОЛЖНО работать и на других серверах приложений / контейнерах сервлетов».

Воду мутите. Либо пруфы, либо выражайтесь корректней. Ещё один UPD пжлст, либо убрать информацию о коммерческой версии GlassFish.
eGarmin
Уровень 41
5 апреля 2015, 13:51
Ну, для собственных продуктов я стараюсь поддерживать страницы в википедии в актуальном состоянии.

Но, вы правы. Моя вина. Прочитал, что страница в википедии недавно была обновлена (там дата стоит 5 марта 2015 года) и поверил. В следующий раз буду внимательней.

Спасибо! Инфу про Oracle GlassFish Server и свою фразу выкинул из статьи
eGarmin
Уровень 41
5 апреля 2015, 13:57
Ты прав, Oracle GlassFish Server 3.1 действительно поддерживает JavaEE 6. Подвела меня старушка википедия, хоть последнее обновление этой страницы и датировано месяцем назад. Спасибо за замечание.

TomEE не рассматривал, т.к. чтобы чем-то себя ограничить брал только сервера с поддержкой JavaEE — Full Platform, а TomEE — это Web Profile. Об этом, в принципе, я писал в топике выше
tanzwud
Уровень 34
5 апреля 2015, 17:46
Ну что теперь осталось дождаться серии постов о ЕЕ технологиях: EJB, CDI, MDB, Transactions, Interceptors, Security -). Удачи
blacky
Уровень 23
5 апреля 2015, 18:06
млин… ну стоит там дата 5 марта 2015, а кто и что правил — хз.
Я не про актуальность страниц в вики. А про использование таких слов как «выбросить», «выкинуть», «впендюрить», «забить» — у всех этих слов помимо негативного оттенка ещё и пренебрежительное отношение к предмету. Если тема касается репутации компании, выпустившей продукт, тогда эти слова более чем неуместны. Они имеют место быть, если дело касается обучения. Я был бы более лоялен к таким словам, если бы статья была на 100500 страниц со всесторонним разбором ровно одного продукта с пруфами и многочисленными подтверждениями, что такая проблема существует. В таких случаях я обычно употребляю слова «оставил», «не рассматривал», «отклонил», «не знаю», «не использовал» — никакой субъективной оценки и негатива.
blacky
Уровень 23
5 апреля 2015, 18:09
Да, хорошо было бы посты о различных версиях EJB — там много интересного.
Или о поддержке транзакционности БД.
В общем, любая тема будет интересна.
Jvc
Уровень 21
4 апреля 2015, 17:30
как раз сейчас наконец-то собрался Apache Tomcat установить. перед тем как идти в гугл за туториалом думаю — поищу на джавараш сначала) это ж надо, даже искать не пришлось! =)