Дорогие джаварашовцы, что я хочу рассмотреть в этой статье? Я просто хочу сделать небольшой обзор той части серверов приложений, которые заслуживают внимания хотя бы тем, что являются бесплатными и доступен их исходный код. Я буду исходить из того, что ваша система сходна с моей. У меня стоит Windows 7 64 бита, кроме того у меня стоит JDK 1.7 и JDK 1.8, а переменная окружения JAVA_HOME ссылается на последний из них. В моем случае это значит, что в JAVA_HOME прописан путь C:\Program Files\Java\jdk1.8.0_31.
Чтобы у вас при повторении ниже описанного возникало как можно меньше вопросов типа «а почему у меня не получилось, может я что-то не так делаю?», я буду пытаться описывать каждое действие, которое я делал на своей машине. Начинаем…
Теперь давайте проверим наличие доступа в админку. Для этого переходим по адресу http://localhost:9713/manager, вводим выбранные логин и пароль и получаем доступ.
УРА! Можно временно отключить 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 и жмем на нее.
Далее, попав на красивую построенную на JSF страницу административной консоли, жмем пункт Change Administrator Password
и вводим нужный нам пароль для пользователя admin, потом подтверждаем его и жмем кнопку Save.
При последующих входах в административную консоль нужно будет указывать логин admin и заданный пароль.
Теперь можно временно отключить Glassfish, для этого достаточно закрыть консоль, в которой он работает.
Для WildFly. Заходим в папку с распакованным wildfly. Далее заходим в папку standalone, потом папка configuration, а в ней файл standalone.xml. Далее действуем по отлаженной схеме. Я поставил порт 9913.
Запустим сервер. Для этого перейдем в папку с распакованным wildfly. Далее заходим в папку bin и запускаем файл standalone.bat. Открываем браузер и вводим адрес http://localhost:9913.
Жмем ссылку Administration Console для входа в админскую консоль (проще говоря, админку сервера приложений). Но не тут-то было, т.к. всплывает экран.
Этот экран сообщает нам, что админ не создан, и чтобы его создать нужно воспользоваться консольной утилитой add-user.bat. Ну, раз надо так надо. Возвращаемся в папку bin и запускаем эту утилиту. Вначале предложат выбрать тип пользователя, которого мы хотим создать. Надо выбрать пункт (a), что будет означать, что нам нужен админ. Потом запрашивается имя этого пользователя Username и пароль Password. Пустым пароль быть не может, но односимвольным – пожалуйста. Утилита конечно поругается, но проглотит, если ей ответить yes на вопрос «Вы уверены?». Далее подтверждаем пароль повторным вводом на запрос Re-enter Password. Потом будут еще вопросы, но на них все просто отвечаем утвердительно и выходим из утилиты.
Вернувшись на страницу выше, находим ссылку Try Again и жмем на нее. Теперь, введя данные только что созданного админа, можно попасть в админку.
Гасим сервер, закрыв окно консоли, через которую он был запущен.
Для 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 и жмем на нее.
Надо ввести админские логин и пароль. Сразу подскажу, что это пользователь system с паролем manager (значения по умолчанию).
Пройдя в саму консоль и проследовав по пунктам меню как на картинке ниже (выбрать радиобатон Advanced, потом выбрать Security > Users and Groups), можно как сменить пароль для пользователя system, так и создать другого админского пользователя, а этого удалить.
Остановить сервер Geronimo можно также простым закрытием окна консоли, в котором сервер был запущен.

Кастинг, т.е. отбор
Для начала нужно отобрать сервера приложений для нашего обзора. Для этого на википедии смотрим статью Comparison of application servers (англ., т.к. другой нет). Там есть табличка с кучей серверов приложений, но для нас интерес представляют только те, которые, с одной стороны, opensource, а с другой, поддерживают JavaEE по полной, т.е. столбец Java EE compatibility в этой таблице должен содержать строчку типа Full Platform. Из этого списка, в котором есть и WildFly, и JBoss сразу можно выкинуть последний, т.к. это просто старое название и старые версии WildFly. В результате получаем следующий список серверов, которые заслуживают нашего внимания:- Glassfish (не проприетарный, а тот, что от сообщества glassfish.java.net, но который поддерживается корпорацией Oracle до такой степени, что если нужен javaEE SDK с сайта Oracle, то тебе впиндюрят и этот сервер приложений, иначе никак)
- (Red Hat) WildFly (бывший JBoss)
- (Apache) Geronimo
- (Apache) Tomcat (это лишь контейнер сервлетов, а не сервер приложений, но он является таким эталоном, на котором, если программа написана правильно, то она точно заработает. На других серверах программа может быть написана правильно с точки зрения JavaEE, но работать все равно будет не корректно или вообще не будет. Это я о Geronimo, о глюках которого можно говорить долго)
- Для Tomcat это будет сайт http://tomcat.apache.org.
- Для Glassfish – сайт http://glassfish.java.net.
- Для WildFly – сайт http://wildfly.org.
- И, наконец, для Geronimo – сайт http://geronimo.apache.org.
Установка
В плане установки все просто и для каждого из выбранных серверов установка – это просто распаковка архива. Я, например, создал папку 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. Должно все заработать и мы увидим тигру.











ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Cогласно википедии, проект GlassFish от Oracle уже довольно мертвый))), т.к. не обновляется 7.5 лет и поддерживает лишь 5-ую версию JavaEE. Свежие версии конкурентов уже поддерживают 7-ую версию JavaEE.
Кроме того, я сразу сказал, что выбирал только среди opensource проектов, т.к. объять необъятное невозможно, да я и не преследовал такую цель.
Видимо википедию не обновляют -). 3я версия официально от oracle поддерживает ЕЕ6. EE7 Да не поддерживает уже. В 2017 будет EE8 если оракле сдержит обещание то некомерческий glassfish будет.
Почему то нету TomEE он open source и судя по коментам неплохо справляется с Java EE6.
Что касается проприетарности то насчет этого у каждого своё мнение. Однако простой пример. К примеру у вас есть два сервера. Один Glassfish у которого хозяин Oracle второй пусть будет WildFly который условно без хозяина, получим что. Оракловская тулза будет работать строго по спецификации, то есть прочитали JSRку и никаких сюрпризов, тогда как WildFly может без проблем однажды с этого пути свернуть и получите недокументированные возможности или проблемы.
Я конечно может где то и не прав. Но по возможности лучше писать приложение в соответствии со спецификацими к примеру Java EE а не под конкретный сервер. Тогда на выходе получается приложение которое работает с любым EE сертифицированым контейнером а proprietary в итоге значит всего лишь платный софт.
Собственный продукт вы так же будете оценивать? Согласно вики-ссылочке автор давно статью не обновлял. На официальной странице написано, что 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 ну или что душе угодно.
Т.е. это лучшая и наиболее полная реализация спецификаций JEE из всех имеющихся.
И фраза должна звучать так: «Что работает на GlassFish ДОЛЖНО работать и на других серверах приложений / контейнерах сервлетов».
Воду мутите. Либо пруфы, либо выражайтесь корректней. Ещё один UPD пжлст, либо убрать информацию о коммерческой версии GlassFish.
Но, вы правы. Моя вина. Прочитал, что страница в википедии недавно была обновлена (там дата стоит 5 марта 2015 года) и поверил. В следующий раз буду внимательней.
Спасибо! Инфу про Oracle GlassFish Server и свою фразу выкинул из статьи
TomEE не рассматривал, т.к. чтобы чем-то себя ограничить брал только сервера с поддержкой JavaEE — Full Platform, а TomEE — это Web Profile. Об этом, в принципе, я писал в топике выше
Я не про актуальность страниц в вики. А про использование таких слов как «выбросить», «выкинуть», «впендюрить», «забить» — у всех этих слов помимо негативного оттенка ещё и пренебрежительное отношение к предмету. Если тема касается репутации компании, выпустившей продукт, тогда эти слова более чем неуместны. Они имеют место быть, если дело касается обучения. Я был бы более лоялен к таким словам, если бы статья была на 100500 страниц со всесторонним разбором ровно одного продукта с пруфами и многочисленными подтверждениями, что такая проблема существует. В таких случаях я обычно употребляю слова «оставил», «не рассматривал», «отклонил», «не знаю», «не использовал» — никакой субъективной оценки и негатива.
Или о поддержке транзакционности БД.
В общем, любая тема будет интересна.