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, 09:05
P.S. Не мотивирует нифига.
VG
Уровень 22
20 августа 2022, 10:10
если тебя такое понятное объяснение на пальцах не мотивирует, то лучше иди ямы копай)) на реальном проекте у тебя бомбанёт не хило))
SWK
Уровень 26
20 августа 2022, 14:59
Ну тебе виднее, как пришедшему с реального проекта...
Jean Valjean
Уровень 41
2 октября 2021, 13:21
Problem installing Java EE assenv.bat скопировать в на другой диск, отредактировать в IDEA, затем заменить основной не видит jdk, также в двойных кавычках путь
Anonymous #2489173
Уровень 35
19 декабря 2020, 13:02
На моменте с артефактом (что бы это ни значило) у меня всё заглохло. В деплойменте у меня такой опции не было, я что-то нагуглил и натыкал, и появился артефакт exploded (тоже что это за взрывы вообще?), а не обычный. Ну и он всё равно не запускается: java: package javax.ws.rs does not exist Если я правильно понимаю, файлы никакие менять вообще не надо было? всё должно было работать?
10 апреля 2020, 08:12
Почему Java EE 7 SDK, а не 8? Сильнее меня беспокоит вопрос: у меня jdk1.8.0_111, как он будет согласовываться с Java EE 7 SDK?
Анзор Кармов
Уровень 31
10 апреля 2020, 10:57
Не было каких либо причин писать про 7-ую, а не 8-ую. В принципе, мне кажется, что в рамках статьи различий толком и не будет между 7 и 8 (возможно за редким исключением). Норм будет согласовываться, у меня тоже была Java 8 и Java EE 7 на момент написания)
11 апреля 2020, 14:11
Спасибо
Игорь Самчев
Уровень 9
9 апреля 2020, 13:33
Учить чистую Java EE -всё равно, что учиться охоте на мамонта. Вымерла она. Совсем. Есть Спринг, есть Play. Что бы покататься на велосипеде, совсем не обязательно изобретать велосипед. Java EE оооооооочень медленная, очень большая, там настроек больше, чем самого кода. Спринг работает из коробки. Intellij Idea создаст проект, в котором будет неделя писанины из Java EE. Статься хорошая, но в целях истории
10 апреля 2020, 08:05
Откуда такая уверенность? Так все однозначно?
Justinian Judge в Mega City One Master
12 апреля 2020, 10:28
Смотря для кого. Для студентов профильных вузов, хоть кобол или фортран, хоть Джава ЕЕ это часть фундамента, а базы много не бывает, профессионал который знает как было до, всегда будет иметь лучше видение что применять и лучшее понимание актуальных технологий. Для свитчеров и тех кто обучается джаве вне университетских программ, все однозначно, чистая джава ЕЕ это вообще не вариант. Максимум потратить 10 минут, чтобы почитать что это такое в принципе. Ну за исключением когда знают что готовят себя к определенному проекту или конкретному узкому сегменту, тогда да. Объема необходимых и самых базовых знаний по джаве столько, что даже покрывшийся испариной ученик не успеет все обработать до первой работы. Даже самую элементарную базу (хотя это оценочная категория конечно), но тем не менее. И в таких ситуациях тратить время на EJB и прочие именно ЕЕ штуки это методический и дидактический провал, если говорить про общие рекомендации. В частном порядке под личную ответственность, пожалуйста, хоть апплеты с фейслетами круглосуточно изучают, и пишут 100 калькуляторов на свинге. Все технологии важны, все технологии нужны. На проектах можно встретить что угодно. Но закон Парето никто не отменял.
13 апреля 2020, 05:25
Содержательно. Спасибо!