GrabDuck

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

:

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

Чтобы у вас при повторении ниже описанного возникало как можно меньше вопросов типа «а почему у меня не получилось, может я что-то не так делаю?», я буду пытаться описывать каждое действие, которое я делал на своей машине. Начинаем…

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


Для начала нужно отобрать сервера приложений для нашего обзора. Для этого на википедии смотрим статью 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, о глюках которого можно говорить долго)

Теперь давайте накачаем этих серверов. Для Tomcat это будет сайт http://tomcat.apache.org/ (а конкретная ссылка на последнюю версию будет http://apache-mirror.rbc.ru/pub/apache/tomcat/tomcat-8/v8.0.20/bin/apache-tomcat-8.0.20-windows-x64.zip).

Для Glassfish – сайт http://glassfish.java.net/ (ссылка для скачивания — http://dlc.sun.com.edgesuite.net/glassfish/4.1/release/glassfish-4.1.zip).

Для WildFly – сайт http://wildfly.org/ (ссылка для скачивания http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.zip).

И, наконец, для Geronimo – сайт http://geronimo.apache.org/ (ссылка для скачивания — http://apache-mirror.rbc.ru/pub/apache/geronimo/3.0.1/geronimo-tomcat7-javaee6-3.0.1-bin.zip).

Где было можно выбрать между 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-ников, которые надо включать в этот архив для корректной работы сервиса, сильно меняется от сервера к серверу.