JavaRush /Java блог /Java Developer /Настройка локального окружения для Java EE разработки
zor07
31 уровень
Санкт-Петербург

Настройка локального окружения для Java EE разработки

Статья из группы Java Developer
В данной статье мы будем настраивать рабочее окружение для запуска Java EE приложений. Напомню: в предыдущем материале мы разобрали основы Java EE. Настройка локального окружения для Java EE разработки - 1Под окружением имеем в виду набор различных программных компонентов:
  • Java EE SDK;
  • Java EE Application Server GlassFish;
  • Настройка IntelliJ IDEA.
Главные цели этого материала:
  1. Показать, как можно подготовить рабочее окружение для работы с Java EE приложениями.
  2. Показать, каким образом можно деплоить и запускать Java EE приложения из IntelliJ IDEA на сервере GlassFish.
Вот что мы сделаем для этого:
  1. Скачаем и установим Java EE 7 SDK.
  2. Поднимем Java EE Application Server GlassFish.
  3. Научимся запускать и останавливать сервер через командную строку.
  4. Настроим IntelliJ IDEA для деплоя приложений на этот сервер.
  5. Развернем и запустим демонстрационное приложение, которое вместе с сервером приложений GlassFish входит в поставку Java EE 7 SDK.
Эта статья будет полезной начинающим Java-девелоперам, которые знакомятся с Enterprise-разработкой на Java. Считайте, что это небольшая подготовка площадки для дальнейшей практики. Вам будет понятен материал, если вы знакомы с базовыми навыками работы в командной строке Windows (PowerShell). Версии используемых в статье программных компонент:
  • GlassFish 4.0;
  • IntelliJ IDEA 2019.3.1 (Ultimate);
  • Java EE SDK 7.

Установка Java EE SDK

Важное условие. Перед установкой Java EE SDK, необходимо удостовериться, что Java SE SDK предустановлена.
  1. Для начала нам необходимо скачать SDK. Для этого в поисковике можно набрать: “Java EE SDK 7”, либо напрямую перейти на страницу загрузки sdk с сайта Oracle.

  2. В списке представленных SDK, необходимо выбрать ту, которая подходит для вашей платформы. В статье описывается установка дистрибутива: “java_ee_sdk-7-jdk7-windows-x64-ml.exe”

  3. Запускаем установочный файл. Во время запуска может возникнуть следующая ошибка (если она не возникнет, значит, можно просто продолжать установку):

    Настройка локального окружения для Java EE разработки - 2

    Это значит, что установщику не удалось найти путь к предустановленной Java Runtime Environment. Ошибку можно исправить, передав путь до JRE вручную средствами командной строки. Для этого необходимо запустить установочный файл через PowerShell и передать через параметр -j путь до предустановленной JRE.

    Например, так:

    Настройка локального окружения для Java EE разработки - 3
  4. Дальнейшая процедура установки вполне типична для большинства программ. Все, что нужно делать, — кликать на кнопки Next и Install.

    Программа установит Java EE SDK, а также сервер GlassFish, который по завершению установки будет поднят и готов к работе.

  5. Чтобы убедиться в работоспособности сервера GlassFish, по завершению установки можно открыть администраторскую панель сервера, которая будет доступна по адресу: http://localhost:4848/

    Скрин — ниже:

    Настройка локального окружения для Java EE разработки - 4

GlassFish запуск и остановка через командную строку

Итак, сервер поднят и работает, но старт сервера был инициирован программой установки. Ниже попробуем разобраться с тем, как стартовать и останавливать сервер самостоятельно. Для начала раскроем такую сущность, как домен. Домен — это набор одного или нескольких экземпляров (инстансов) GlassFish сервера, управляемых одним сервером администрирования. При установке сервера GlassFish создается домен по умолчанию — domain1. С ним связаны такие компоненты:
  • Порт сервера (по умолчанию 8080);
  • Порт сервера администрирования (по умолчанию 4848);
  • Имя пользователя и пароль администратора (по умолчанию — admin, и по умолчанию пароль не требуется).
В домене domain1 закреплены значения по умолчанию. Настройка локального окружения для Java EE разработки - 5Для запуска и остановки сервера дистрибутив GlassFish включает в себя несколько скриптов, которые по умолчанию располагаются в следующей директории: C:\glassfish4\glassfish\bin Для запуска и остановки сервера GlassFish через командную строку, можно использовать скрипт asadmin и его команды:

asadmin start-domain domain_name
asadmin stop-domain domain_name
Попробуем остановить сервер (так как после установки он уже запущен), запустив PowerShell из поддиректории C:\glassfish4\glassfish\bin: Настройка локального окружения для Java EE разработки - 6Сервер остановлен. Теперь запустим его: Настройка локального окружения для Java EE разработки - 7

Разбираем первое Java EE приложение, dukes-age

Далее мы рассмотрим демонстрационное Java EE приложение: dukes-age. Данное приложение включается в поставку Java EE SDK совместно с приложением first-cup. Описание данных приложений представлено на сайте с официальной документацией Oracle в разделах 3 и 4 вводного курса по Java EE для начинающих Java EE разработчиков. В данной статье мы кратко рассмотрим приложение dukes-age и более подробно разберем процесс запуска данного приложения на сервере GlassFish из среды разработки IntelliJ IDEA. Приложение располагается внутри директории сервера glassfish. Если вы не меняли путь по умолчанию для сервера glassfish при установке Java EE SDK, вы сможете найти данное приложение в папке: C:\glassfish4\docs\firstcup\example\dukes-age. Наверное, каждый Java разработчик, начинающий и опытный, хотя бы раз видел талисман языка программирования Java — Дюка: Настройка локального окружения для Java EE разработки - 8Немногим известно, что у Дюка есть день рождения. Он родился 23 мая 1995 года, когда была опубликована первая демо-версия технологии Java. Приложение dukes-age, как следует из названия, выдает информацию о возрасте Дюка. Откроем данное приложение в IntelliJ IDEA: File -> New -> Project From Existing Sources… Затем перейдем в папку с приложением dukes-age, расположенную по умолчанию по адресу C:\glassfish4\docs\firstcup\example\dukes-age, выберем файл pom.xml и нажмем кнопку OK: Настройка локального окружения для Java EE разработки - 9У нас откроется приложение со следующей структурой: Настройка локального окружения для Java EE разработки - 10Взглянем на код класса DukesAgeResource:

package firstcup.dukesage.resource;

import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

/**
 * REST Web Service
 *
 */
@Path("dukesAge")
public class DukesAgeResource {

    /** Creates a new instance of DukesAgeResource */
    public DukesAgeResource() {
    }

    /**
     * Retrieves representation of an instance of DukesAgeResource
     * @return an instance of java.lang.String
     */
    @GET
    @Produces("text/plain")
    public String getText() {
        // Create a new Calendar for Duke's birthday
        Calendar dukesBirthday = new GregorianCalendar(1995, Calendar.MAY, 23);
        // Create a new Calendar for today
        Calendar now = GregorianCalendar.getInstance();

        // Subtract today's year from Duke's birth year, 1995
        int dukesAge = now.get(Calendar.YEAR) - dukesBirthday.get(Calendar.YEAR);
        dukesBirthday.add(Calendar.YEAR, dukesAge);

        // If today's date is before May 23, subtract a year from Duke's age
        if (now.before(dukesBirthday)) {
            dukesAge--;
        }
        // Return a String representation of Duke's age
        return "" + dukesAge;
    }
}
Это JAX-RS RESTful web-сервис с одним методом — getText(). Если изучить код данного метода, станет ясно, что метод возвращает количество лет, прошедших со дня рождения Дюка. То есть, метод возвращает возраст Дюка. Класс является ресурсом в контексте REST.
  1. Аннотация над классом @Path("dukesAge") определяет URI путь, обращения на который будет обрабатывать данный класс.
  2. Аннотация над методом @GET говорит нам о том, что данный метод обрабатывает GET запросы.
  3. Аннотация @Produces("text/plain") определяет media type ответа на запрос. Нетрудно догадаться, что метод getText() будет формировать ответы с media type: text/plain.
Взглянем также на конфигурационный файл web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
    </servlet>
    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>
В данном файле, внутри тега servlet-mapping, определен тег url-pattern со значением /webapi/*. Здесь определяется некоторая корневая точка, обращения на которую будут обрабатываться в дальнейшем сервисом. Если сложить с аннотацией @Path("dukesAge"), выходит, чтобы получить информацию о возрасте Дюка, необходимо обратиться на адрес /webapi/dukesAge.

Настройка IntelliJ IDEA для запуска Java EE приложения на сервере GlassFish

Получив весьма обобщенное представление о приложении dukes-age (подробнее читайте о нем на сайте Oracle), давайте настроим IntelliJ IDEA, чтобы мы могли запускать это приложение из нашей IDE. Настройка IntelliJ IDEA
  1. Для этого переходим в меню Run -> Edit Configurations.
  2. У нас откроется панель Run/Debug Configurations: Настройка локального окружения для Java EE разработки - 11
  3. Нам необходимо добавить новую конфигурацию. Для этого нажмем на плюсик, либо воспользуемся хоткеем Alt+Insert. В открывшемся списке выберем GlassFish Server -> Local: Настройка локального окружения для Java EE разработки - 12
  4. В открывшемся окне приступим к настройке конфигурации: Настройка локального окружения для Java EE разработки - 13
  5. Следующим шагом укажем артефакты, которые необходимо будет деплоить на сервер. Это можно сделать через вкладку Deployment, нажав на плюс -> Artifact... Настройка локального окружения для Java EE разработки - 14
  6. Выбираем dukes-age:war и нажимаем OK: Настройка локального окружения для Java EE разработки - 15
  7. Далее сохраняем нашу конфигурацию, нажав на Apply, а затем OK.
Конфигурация создана!

Запуск приложения

Теперь давайте попробуем запустить приложение.
  1. Для этого можно воспользоваться хоткеем Alt+Shift+F10, либо через меню Run -> Run…

    И выбираем созданную нами конфигурацию dukes-age:

    Настройка локального окружения для Java EE разработки - 16

  2. После этого мы видим логи запуска в панели Services:

    Настройка локального окружения для Java EE разработки - 17
  3. Затем, если все сделано согласно инструкции, откроется браузер и станет понятно, что ничего не работает:

    Настройка локального окружения для Java EE разработки - 18
Таков уж мир IT. Даже если все сделано правильно, что-то может не работать. Но не стоит переживать: можно было бы сразу описать, как сделать правильно, но тогда некоторые нюансы были бы менее очевидны. Например, как формируется url, на который нас направляет IDEA при запуске приложения? Обратим на него внимание. Нас перенаправили на http://localhost:8080/dukes-age-7.0.1/. Чтобы понять, откуда это взялось (/dukes-age-7.0.1/), перейдем в администраторскую панель сервера GlassFish. В левом меню необходимо кликнуть на пункт Applications. Далее вы увидите задеплоенные приложения, в том числе dukes-age. При выборе приложения dukes-age, можно увидеть некоторые его характеристики, в том числе и пункт Context-Root: Настройка локального окружения для Java EE разработки - 19dukes-age-7.0.1 — это имя и версия приложения. Корневая точка. Все запросы, которые будет обрабатывать dukes-age, должны начинаться с префикса /dukes-age-7.0.1/. Итак, у нас есть корневая точка: /dukes-age-7.0.1. Также, ранее мы обсуждали, что наше приложение будет обрабатывать обращения на /webapi/dukesAge. Совместим эти две вещи и обновим нашу конфигурацию.
  1. Для этого вернемся в IntelliJ IDEA, затем в меню: Run -> Edit Configurations…

  2. Выберем ранее сохраненную конфигурацию и обновим URL в соответствии со скрином ниже:

    Настройка локального окружения для Java EE разработки - 20
  3. Сохраним конфигурацию и перезапустим наше приложение с помощью хоткея Ctrl+Shift+F10, либо с помощью специальной кнопки, на панели Services:

    Настройка локального окружения для Java EE разработки - 21
  4. После перезапуска, если все было сделано правильно, мы увидим возраст Дюка:

    Настройка локального окружения для Java EE разработки - 22
Отлично. Наконец-то мы выяснили, что Дюку 24 года. Если вы не повторите все описанные шаги в течении ближайшей пары месяцев, начиная с апреля 2020, то Дюк, вероятно, немного состарится.

Заключение

В данной статье мы разобрали, как можно настроить свое локальное окружение для работы с Java EE приложениями на примере сервера GlassFish 4.0, среды разработки IntelliJ IDEA 2019.3.1 (Ultimate), а также Java EE SDK версии 7. Мы рассмотрели, как можно:
  • скачать и установить Java EE SDK, а также сервер GlassFish;
  • остановить и запустить сервер GlassFish через PowerShell;
  • настроить IntelliJ IDEA, чтобы можно было деплоить Java EE приложения из IDE на сервер GlassFish и сразу же запускать их.

Бонусное задание

  1. Повторить все описанные шаги самостоятельно.
  2. Изучить вводный курс по Java EE для начинающих Java EE разработчиков от Oracle.
  3. Пункт со звездочкой. Попробовать задеплоить самостоятельно второе демонстрационное приложение first-cup. Данное приложение более интерактивное, а также оно взаимодействует с приложением dukes-age. Для выполнения данного пункта необходимо будет самостоятельно разобраться с такими вопросами:
    1. Как включить базу данных внутри сервера glassFish;
    2. Как интегрировать два приложения друг с другом (внутри first-cup указать путь до эндпоинта dukes-age, который мы обсуждали в данной статье);
    3. Как создать новую конфигурацию в Intellij IDEA для деплоя first-cup (по аналогии с тем, как было показано в данной статье);
    4. Возможно, многими другими вопросами )
P.S. Порог вхождения высок, но разве не это вас мотивирует?
Комментарии (12)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
SWK Уровень 26
10 ноября 2021
P.S. Не мотивирует нифига.
Jean Valjean Уровень 41
2 октября 2021
Problem installing Java EE assenv.bat скопировать в на другой диск, отредактировать в IDEA, затем заменить основной не видит jdk, также в двойных кавычках путь
Anonymous #2489173 Уровень 35
19 декабря 2020
На моменте с артефактом (что бы это ни значило) у меня всё заглохло. В деплойменте у меня такой опции не было, я что-то нагуглил и натыкал, и появился артефакт exploded (тоже что это за взрывы вообще?), а не обычный. Ну и он всё равно не запускается: java: package javax.ws.rs does not exist Если я правильно понимаю, файлы никакие менять вообще не надо было? всё должно было работать?
10 апреля 2020
Почему Java EE 7 SDK, а не 8? Сильнее меня беспокоит вопрос: у меня jdk1.8.0_111, как он будет согласовываться с Java EE 7 SDK?
Игорь Самчев Уровень 9
9 апреля 2020
Учить чистую Java EE -всё равно, что учиться охоте на мамонта. Вымерла она. Совсем. Есть Спринг, есть Play. Что бы покататься на велосипеде, совсем не обязательно изобретать велосипед. Java EE оооооооочень медленная, очень большая, там настроек больше, чем самого кода. Спринг работает из коробки. Intellij Idea создаст проект, в котором будет неделя писанины из Java EE. Статься хорошая, но в целях истории