Опыт изучения технологии JavaEE
Содержание
- Введение
- Изучение CentOS и PostgreSQL
- Технологии работы с БД: JDBC, Hibernate
- Сервлеты, JSP, JSF
- Дополнительные технологии: JUnit, SVN, Maven
- Заключение
Введение
В интернете встречается огромное количество информации по JavaEE, но, к сожалению, мне не встречались полноценные статьи с информацией о том, что надо изучить. Эта проблема связана с тем, что область изучения JavaEE огромна и перечислять все, что в ней есть, бесмысленно для новичка. Пожалуй, более-менее полноценным ресурсом для начала я бы назвал ресурс java‐course.ru. Но, во-первых, большинство информации в нем устарело, а во-вторых, по моему мнению, алгоритм изучения стоит полностью изменить.
Первый опыт изучения у меня был на 3 курсе. Я дошел до уровня, достаточного для JavaEE Junior Developer, но больше так и не продвинулся, так как развитие требует практики, а практика означает постоянную работу. Совмещать работу и учебу на то время я не решился. На сегодняшний день я вновь приступил к изучению данной технологии, поэтому данное индивидуальное задание основано на совмещении старых знаний и текущих приобретаемых.
Не могу сказать, что претендую на объективность в правильности понимания некоторых концепций или пути изучения, но я попытаюсь описать как стоит изучать JavaEE с моей точки зрения. Для начала советую прочитать статью про архитектуру Enteprise приложений. В индивидуальном задании я опишу, что нужно для получения базовых знаний и написания простейшего приложения JavaEE.
Базовые технологии: Java SE, HTML/CSS, XML
Итак, для начала изучения JavaEE вы должны хоть немного знать базовую Java. Немного – это хотя бы полгода практики написания приложений. Лично мне этого вполне хватило. Как мне кажется, чем более сложные приложения вы будете писать, тем больше вы должны знать в JavaSE. По крайней мере, не могу сказать, что для написания простейших приложений с примением JavaEE нужно иметь уровень подготовки, достаточный для сдачи сертификационного экзамена. Мне вот пока это не пригодилось. Но в целом, нюансы нужно знать. На собеседовании вас обязательно спросят. Спросят и про базовые принципы JavaSE, и про концепции JavaEE. Что нужно изучить обязательно – это аннотации и reflection. Аннотации – по сути метаданные, которые будут использоваться какими-то анализаторами. Reflection – это механизм исследования данных о программе во время её выполнения. Гуру настоятельно рекомендуют его изучить прежде всего для понимания принципов работы Java, но когда вы будете писать простейшие приложения, мысль о том, зачем все это нужно, будет появляться в голове не раз.
Литература: Кей С. Хорстманн Java. Том 1 и Java. Том 2.
Так как JavaEE ориентирована на веб, то знание HTML/CSS является обязательным. Не требуется, конечно, знать всё. Хотя бы знайте как написать свою страничку. Я знаком с HTML/CSS уже лет 7, но никогда особо в него не углублялся и не использовал. Поэтому каждый раз, когда приходится что-то писать, я вспоминаю заново. Для JavaEE мне вполне хватило повторить базовые теги и базовый CSS.
Литература: Конкретные источники не указываю. Наверное, лучше всего изучать по примерам на сайте W3C.
Третьим китом, на который должны опираться ваши знания, явлется XML. Это действительно очень важно знать. Прежде всего нужно изучить DTD и Schema – они используются для описания схемы документа и для его валидации. XML используется во многим местах, начиная от JSP-страницы и заканчивая конфигурационным файлом Maven.
Литература: Тот же сайт W3C.
Изучение CentOS и PostgreSQL
Я сознательно вынес изучение ОС Linux и СУБД в отдельный пункт. Эти технологии лучше изучать в комплексе. Кроме знаний ОС и СУБД еще нужно уметь работать с веб-сервером, но об этом ниже.
Так как JavaEE – это рынок корпоративных приложений, то следует знать основы работы с серверными ОС. Поэтому, если нужна ОС уровня предприятия, то CentOS является одним из лучших вариантов. В качестве второй ОС я использую Linux уже порядка 4 лет. В основном, я использовал наиболее популярный на данный момент Ubuntu Linux. Разница между CentOS и Ubuntu не очень значительна, поэтому для меня не было сложностью перейти на другую ОС. Но если вы совсем не знакомы с ОС Linux, начинайте учиться сразу на CentOS. Не надо быть гуру в этой области, но базовые операции вы должны знать.
Литература: Google и man вполне достаточно. Главное – практика.
Веб-серверов для работы с JavaEE большое количество. Я использовал для изучения Apache Tomcat, как один из самых популярных. Изучение принципов работы с веб-сервером – достаточно объемная тема, поэтому, как по мне, для начала надо научиться размещать проект на веб-сервере и уметь перегружать сам веб-сервер.
Литература: Для установки и изучения Tomcat мне пригодились статьи David Ghedini и User Guide самого Tomcat.
В качестве СУБД я выбрал PostgreSQL. Выбор в пользу этой СУБД, в принципе, основывался на мнении, что для крупных проектов нужна база данных, позволяющая работать с большими объемами данных. Так же как и в случае с веб-сервером, изучение возможностей СУБД PostgreSQL займет большое количество времени. Поэтому для начала достаточно знать как вообще поставить эту базу, настроить доступ со стороны веб-сервера, пользовательскую политику и, конечно же, базовые понятия SQL.
Литература: Для установки и изучения PostgreSQL мне пригодились статьи того же David Ghedini и онлайн‐документация по СУБД.
Технологии работы с БД: JDBC, Hibernate
По определению Википедии JDBC – это платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД. Таким образом, чтобы работать с конкретной базой данных, вы должны скачать jdbc для соотвествующей СУБД и указать в classpath или подключить к проекту (в нашем случае jdbc еще нужно будет разместить на сервере). JDBC по своей сути – это API, который позволяет подключиться к БД, записать или прочитать данные с помощью SQL-команд. С моей точки зрения, на практике это не очень удобно. Изучению этой технологии я уделил мало времени, так как для меня была интересна технология, описываемая ниже.
Литература: Мне вполне хватило одной главы из Кей С. Хорстманн Java. Том 2.
Hibernate – это библиотека, которая позволяет работать с СУБД через классы Java. Такая технология называется object-relational mapping (ORM). Она позволяет легко связать ООП-класс с таблицами базы данных. ORM можно реализовывать либо с помощью XML, либо с помощью аннотаций. Поэтому при использовании этой библиотеки как раз и пригодятся знания, полученные ранее. С моей точки зрения, аннотации намного удобнее. В целом, при изучении этой библиотеки не должно возникнуть особых проблем. Единственная сложность, которая, возможно, появится – реализация отношения "многие-ко-многим" в классах Java. На момент написания индивидуального задания примеров намного больше, чем когда я изучал JavaEE в первый раз.
Литература: Для изучения Hibernate пригодится документация и книга "Java Persistence with Hibernate" (примечание: библиотека быстро развивается, поэтому многие методы и объекты в документации могут быть устаревшими).
Сервлеты, JSP, JSF
Сервлет – это java-программа, которая выполняется на сервере, получает запросы от клиентов и возвращает результат в виде html-страницы. То есть по сути – это посредник между сервером и клиентом. Веб-серверы, описанные выше, часто еще называют контейнерами сервлетов. Сервлет имеет ряд функций типа init, destroy, doGet, doPost и др. Как и в случае с JDBC, сам по себе сервлет мало пригоден для разработки крупных проектов, а изучение сервлетов автоматически означает изучение JSP-страниц
Литература: Как по мне, очень хорошая статья приведена на сайте IBM.
JSP-страница (JSP – Java Server Pages) – это текстовый документ, который состоит из статического содержимого (html, xml и т.п.) и динамического (JSP-элементы на языке Java). JSP-страница фактически является сервлетом, но предназначенным для передачи данных пользователю – контейнер сервлетов преобразует ее в html-страницу и возвращает пользователю. Знание сервлетов и JSP позволит писать приложения любого уровня сложности, но ведущие компании уже давно изпользуют технологию JSF, которая является стандартом в технологии JavaEE 6.
Литература: Достаточно полная информация представлена на сайте Java2EE.
JSF (Java Server Faces) – еще один шаг, облегчающий разработку интерфейсов для Web-приложений на Java. Сам фреймворк JSF реализует модель MVC и работает по тем же принципам, что и связка Servlets+JSP. JSF позволяет использовать собственный сервлет, настройки которого достаточно указать в соответствующих файлах. В качестве страниц для отображения используются все теже JSP-страницы либо технология Facelets. В принципе, выбор за Вами, но существует мнение, что использование JSP в JSF сродни забивания шурупов молотком. Для связи элементов страницы и объектов Java используются так называемые Managed Beans, которые, по-моему мнению, чем-то напоминают трансляцию таблиц БД в объекты Java.
Литература: Такак JSF является стандартом JavaEE 6, то лучше всего изучать эту технологию по документации Oracle.
Дополнительные технологии: JUnit, SVN, Maven
С моей точки зрения, хоть эти технологии и являются дополнительными, в то же время они – неотъемлемая часть разработки любого JavaEE приложения.
JUnit – это библиотека для написания unit тестов. Unit-тестирование – процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы. JUnit – это вторая библиотека, где пригодилось знание аннотаций. Естественно возникает вопрос – зачем вообще нужен этот JUnit. Первые приложения, в которых я использовал тесты, были написаны на втором курсе в рамках изучения Java и у меня также возникал этот вопрос. Тесты нужны не для поиска ошибок в методе, а для того, чтобы проверить, правильно ли работает метод после каких-либо изменений в нем.
Литература: Вполне достаточно базовой документации.
SVN – это свободная централизованная система управления версиями. Две основные задачи, которые обеспечивает SVN – резервное копирование проекта и командная разработка. Для того, чтобы изучить эту технологию, необходимо завести проект на бесплатном хостинге и поставить SVN. Без сомнения, наиболее правильный вариант – изучить консольные команды. В то же время, можно начать с более простого варианта – использовать IDE с плагинами. В случае IDE Eclipse необходимо поставить плагин Subclipse и пакет JavaHL (нужен для связи Eclipse и SVN).
Литература: Очень полезный ресурс по Subversion.
Apache Maven — фреймворк для автоматизации сборки проектов, использующий xml (альтернативой может служить Ant). Maven является незаменимым при сборке крупных проектов. Знания Maven также необходимы, как и знания GNU/Linux, веб-серверов и СУБД. С моей точки зрения, два самых главных его преимущества – это сборка проекта из командной строки и управление зависимостями. Первое преимущество связано с тем, что у вас не всегда есть IDE под рукой, да и вообще – вполне возможно, что доступ к серверу, на котором будет разворачиваться проект, будет только через консоль. Управление зависимостями значительно облегчает подключение к проекту сторонних библиотек, особенно когда их много и одни библиотеки зависят от других.
Литература: Очень полезная статья приведена на сайте IBM.
Заключение
В индивидуальном задании я попытался описать, что лучше всего учить для начала и где искать информацию. Безусловно, опыт изучения лучше было бы описать с включением больших и подробных примеров, но, во-первых, тогда это бы превратилось в большой цикл статей, а, во-вторых, в интернете полно примеров и необходимой справочной информации. Часть технологий я сознательно не включил в описание, так как для простых приложений они не понадобятся. Из таких технологий можно выделить JavaScript, AJAX, фреймворки EJB и Spring, аспектно-ориентированное программирование, web-сервисы, различные библиотеки для создания UI.