×Закрыть

Пособие для будущего Java разработчика. Enterprise — часть 3

Я сказал тебе правду. Правду — если смотреть на неё с определённой точки зрения. Многие из тех истин, которым мы доверяем, являются таковыми лишь тогда, когда мы придерживаемся определённой точки зрения.
Оби-Ван Кеноби (Звездные войны: Эпизод 6 — Возвращение Джедая)

Да, вы уже близко. За горизонтом маячит финишная черта. Оглянувшись назад, вы замечаете, что вместо сотни учащихся вас осталось всего человек 20. Закон Парето неумолим — пока все остальные ноют, вы двигаетесь дальше. Перед вами ключ, а открывать дверь или нет — решать только вам. Ladies and gentlemen, представляю вам заключительную часть по Enterprise.

Application Servers

Tomcat

Tomcat нужно не просто уметь запускать и вырубать. Мыслите шире: при своей простоте этот application server имеет глубину. Практические шаги при освоении:

  1. Задеплоить web application на томкат;
  2. Прикрутить Remote Debug;
  3. Perfomance tuning;
  4. Разобраться с настройкой SSL;
  5. Security. servers.xml;
  6. Jasper, Connectors.

На данный момент документация по Tomcat 8 находится на официальной странице Apache. Для более детального изучения могу порекомендовать книгу «Tomcat The Definitive Guide» by Jason Brittain:

Обратите внимание на разделы Perfomance, Configuration и Deployment.

Weblogic

Из тяжелых Enterprise серверов, думаю, следует рассмотреть Weblogic. Не будем трогать связку с Oracle Service Bus. Начните с официального Introduction туториала и плавно переходите к «Oracle WebLogic Server 12c: Distinctive Recipes: Architecture, Development and Administration» by Frank Munz:

По большому счету, можно повторить почти те же шаги, которые описаны выше для Томката. Обратите внимание на роль JMX, да и вообще на то, как тесно компоненты JavaEE связаны с процессами в Weblogic.

Logging

Slf4J

Думаю, достаточно разобрать Slf4j в связке с Log4J/Logback. Не хочу рекомендовать какие-либо книги — обратите внимание на slf4j.org и на то, как этот фасад взаимодействует с logging фреймворками.

Что нужно уловить в логировании? Приблизительно:

  1. Уровни логирования. Где ставить error, где trace, где остальное;
  2. Цена вызова. Да-да, вы не ошиблись. Логирование — штука не бесплатная, стоит каких-то милли/нано секунд. Шикарная статья на эту тему у Руслана Черемина;
  3. Как выключать/включать разные уровни логирования;
  4. Принципиальные различия между log4j/java.logging/logback.

Не углубляясь в асинхронный logging и всем надоевший Spring AOP, где каждый считает своим долгом использовать АОП модель только для логирования, уясните следующее: что вам дает логирование и как вы можете улучшить проект, используя его. Обратите внимание на возможные анти-паттерны в этой области.

Presentation Level

Serlvets/JSP

Ох уж эта Kathy Sierra! Что я бы делал без тебя? Одна из самых лучших книг Java тематики — «Head First Servlets and JSP» by Kathy Sierra:

Так разжевать материал — это надо уметь! Здесь не только о сервлетах, а вообще о Web разработке в целом. Начать с того, что представляет из себя Client-Server, после пройтись по HTTP и глубоко коснутся Servlets/JSP — это твердая 5. Читать всем! Да, я знаю, что книга устаревшая. Дело в концепции, которую лучше никто не объяснит.

А пока вы готовитесь кидать в меня помидоры, я представляю вторую толстую книгу — «Murach’s Java Servlets and JSP, 3rd Edition» by Joel Murach:

Это не менее авторитетная книга по сервлетам. Возможно, Head First Servlets покажется вам детской книгой, тогда присмотритесь к этой.

Для поклонников «зачем читать книги, если есть спецификации» — Servlet API,JavaServerTM Pages 2.1.

Из курсов можно выделить «Servlets and JSPs Tutorial: Learn Web Applications With Java» на Udemy и не менее интересный JavaBrains.

Spring MVC

Не буду долго останавливаться здесь, потому как в прошлой части было разобрано многое по Spring. Конкретно по Spring MVC — «Professional Java Development with the Spring Framework» by Rod Johnson:

Обратите внимание только на те главы, в которых описан Spring MVC, остальное уже покрыто в прошлой части.

На что обратить внимание в Spring MVC:

  1. Конечно же, DispatcherServlet. Что это за зверь такой и почему он тут самый главный?
  2. Дует DispatcherServlet и WebApplicationContext;
  3. ViewResolver, MultipartResolver;
  4. Controllers, Generators;
  5. Валидация.

GWT

Начинать изучение GWT без просмотра роликов от самого Google — это плевок им в душу.

Из книг — «GWT in Action» by Adam Tacy:

Полноценное руководство по GWT. Рекомендую. Если у вас есть еще какие-то интересные ресурсы по GWT, пожалуйста, оставьте в комментариях.

Services

Эх, сервисы... Уже и сам Фаулер заговорил о Microservices как об одних из главных тенденций ближайшего времени. С чего начать? Для начала остановите популярную какофонию у себя в голове: REST — это вид архитектуры, SOAP — это протокол. Все! Никаких но!

Очень сильный толчок в развитии SOA головного мозга можем вам дать Thomas Erl и сайт, где продаются его книги.

Касательно Microservices — есть очень хорошая статья на хабре, а также специальный раздел Microservices на страничке Фаулера.

Больше реальных примеров? Посмотрите, как реализованы сервисы Soundcloud.

Java презентации? Обзор возможных фреймворков есть тут.

REST

Прежде всего, сама диссертация от создателя REST Roy Fielding.

Из книг — «The REST API Design Handbook» by Georgee Reese. Пожалуй, это самая популярная книга для вводной по REST API:

Из видео курсов: «REST Web Services using Java EE» от Udemy.

Также стоит внимания и спецификация по JAX-RS.

Если вы напрямую работаете с Jersey, то уже и без меня знаете, что лучше этого мануала ничего нет и не нужно.

Из книг по JAX-RS можно выделить «RESTful Java with JAX-RS» by Bill Burke:

Еще — «Java Web Services: Up and Running» by Martin Kalin:

Кстати, эта книга в какой то степени покрывает и JAX-WS. Вот спецификация по JAX-WS.

Front-End

Я не хочу забирать хлеб у фронтендщиков, поэтому скажу лишь следующее: любой джавист, связанный с web проектами, обязан знать HTML/CSS/JS в той или иной степени. Предлагаю сильно не зацикливаться на этом, а просто разобрать ресурсы, хотя бы для поверхностного изучения.

«Изучаем HTML, XHTML и CSS» Эрика Фримена:

Книга для 7 класса, но тем не менее. Усложните себе задачу: прикрутите Spring Thymeleaf и попробуйте написать какие-то примеры из книги, используя также сервер-сайд.

Конечно, нельзя не пройти мимо двух популярных школ — CodeAcademy и CodeSchool.com. Не поскупитесь на платный аккаунт CodeSchool.com и пройдите все (я не шучу) — это, наверное, самые лучшие курсы по front-end в интернете. Большое преимущество курсов от CodeSchool — ориентированность на HTML5 и responsive design.

JavaScript

Та же самая серия книг Head First на русском — «Изучаем JavaScript» Майкла Моррисона:

Есть еще неплохой интерактивный курс от javascript.ru.

Конечно, полезно будет разобраться хотя бы в 2-3 толстых фреймворках по JS. Начните с jQuery и/или AngularJS, благо книг и ресурсов полным-полно.

RoadMap

Вот мы и заканчиваем статью Enterprise. Представляю вашему вниманию RoadMap по изучению материала. Говорю прямо и сразу в лоб: новичку все читать не нужно. Как в игре, вам лишь нужно выбрать расу и класс. Расу мы уже выбрали, поэтому давайте определимся с классом.

Внимание! Помимо стека, каждый толковый junior должен:

  1. Уметь на экспертном уровне работать с операционной системой;
  2. Иметь представление о vcs (git, svn);
  3. Знать English на внятном уровне (уметь говорить и понимать, что от тебя требуется), разбираться не только в технической документации, но и в проектной;
  4. Быть знакомым с Software Development Lifecycle, а также Scrum/Waterfall.


Junior Light Stack. Без прямого упора на EE фреймворки.


Junior EE. Ну тут все понятно, полная интеграция с Java Enterprise Edition. Большие рыбы аутсорса уже выехали к вам :)


Java Web Junior. Упор на Web разработку. В скобочках указаны дополнительные варианты фреймворков, которые можно изучить.

Заключение

Выбрав один из вариантов, недостаточно просто прочитать те книги, которые были озвучены в этой статье. Главное — это своими руками написать проект, использовав все, что есть на картинке, и по делу.

Статью Enterprise можно считать закрытой. Если есть какие-то вопросы, пожалуйста, задавайте в комментариях — я постараюсь ответить.

В следующей статье мы поговорим о новых языках программирования и о Computer Science.

Спасибо за внимание! Удачи, ребята, в обучении. ;)


Предыдущие части цикла:
— Пособие для будущего Java разработчика. Основы Java.
— Пособие для будущего Java разработчика. Элегантный код.
— Пособие для будущего Java разработчика. Enterprise — часть 1.
— Пособие для будущего Java разработчика. Enterprise — часть 2.


Следующие части цикла:
— Пособие для будущего Java разработчика. Новые горизонты.
— Пособие для будущего Java разработчика. Собеседование и карьера.

LinkedIn

37 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Чи буде продовження? Якщо я правильно зрозумів статті виходили щопонеділка...

По Spring MVC, мне вот эта книжка понравилась: Spring MVC Beginner’s Guide.

Особенности: high bias to practice (considers creating web store) + Angular JS.

Application Servers
Tomcat
Не хочу быть занудой, но все же. Tomcat это веб контейнер, но никак не апликейшен сервер в рамках JEE.

Вы путаете теплое с мягким. То что tomcat контейнер сервлетов, не дает ему права не быть application server’ом. И я его не рассматривал в рамках JEE.
Для вас: www.tomcatexpert.com/...tomcat-application-server

Контейнер сервлетов отличается от сервера приложений как Apache Tomcat от Apache TomEE

Как бы еще раз :)
Если вы под словом Application Server подразумеваете платформу для web приложений только уровня JavaEE тогда да.

Вопрос и правда холиварный, как в мире пыха чем микро-фреймворк отличается от фреймворка например.
Или сервис от микросервиса.
Я вполне представляю приложение на чистом Томкате. Как и вообще без него. Но так как почти всегда Томкат обвешивают всяким разным, то что-то с теоретическими рассуждениями не так. Или с Джава планетой tomee.apache.org/comparison.html

Я согласен с вами.
Все зависит от того, кто какой закладывает смысл в слово application server.

скажем так, если человек претендует на Enterprise Java разработчика, то должен бы вольно пересказать абзац «Java application servers» из en.wikipedia.org/wiki/Application_server
а не задумываться долго над вопросом — чем контейнер сервлетов отличается от сервера приложений. и «а чем от веб контейнера? ;)» не должен стать контрольным выстрелом в голову :)

если же строго формально, то да, в программировании слишком мало математики, и потому в большинстве случаев строгое и однозначное определение дать низя. «гуманитарщина» или «инженерная философия», это да.

Вы видимо хотели сказать в «Enterprise программировании слишком мало математики» )

Вы бы лучше сказали где её много. А то слишком много придётся переселять где её мало

В самом программировании не так много, все зависит от прикладной области. Букмекерские ПО, гемблинг, геймдев, базы данных, все алгоритмы это сплошная математика. Есть даже название специальное «кванты», программисты с матуклоном. Не спорю что НЕ математики больше, но обоьщать я бы не стал

В самом программировании не так много
об этом я и сказал.
Букмекерские ПО, гемблинг, геймдев, базы данных, все алгоритмы это сплошная математика.
там алгоритмов дай бог чтобы на 10% из всего кода.

остальное — та самая инженерия и гуманитарщина.

но обобщать я бы не стал
полистайте код, и убедитесь сами. хоть игрушки какой, хоть базы данных.
Думаю, достаточно разобрать Slf4j в связке с Log4J/Logback.

C log4j2 уже не актуально. Вторая версия вобрала все лучшее с Logback. И Slf4j уже не нужен.

Цена вызова. Да-да, вы не ошиблись. Логирование — штука не бесплатная, стоит каких-то милли/нано секунд. Шикарная статья на эту тему у Руслана Черемина;

Тоже не актуально. Во-первых потому что перформанс логинга важен только для <1% проектов. Во-вторых все это уже есть в log4j2.

C log4j2 уже не актуально. Вторая версия вобрала все лучшее с Logback. И Slf4j уже не нужен.

log4j, sl4j и другие будут годами на проектах, не всегда возможно использовать новомодные штуки, особенно когда речь идёт о Java.

Тоже не актуально.

это не значит, что нужно бездумно лепить логгирование, особенно без возможности исключить выполнения кода, когда само логгирование выключено.

log4j, sl4j и другие будут годами на проектах
С логингом такой проблемы нету если не использовался кастомный код. Заменить логер дело 10 минут. Так что тут это скорее вопрос желания и мотивации.
это не значит, что нужно бездумно лепить логгирование
А где я говорил что так надо делать?

Дело не в мотивации, дело в том как предоставить максимально удобный порог новичку для того, чтобы получить желанную работу.

Мы можем сколько угодно говорить о том, что вот вышла какая то новая версия фреймворка, а вот то и то уже не актуально. Факт остается фактом: примитивные знания slf4j/log4j будут спрашивать на собеседованиях, а это как раз нам и надо. Нам нужно дать новичку реальный шанс устроится на работу. Log4j2 вышел еще год назад, но что то в вакансиях никто даже и не упоминает его.

Факт остается фактом: примитивные знания slf4j/log4j будут спрашивать на собеседованиях
Вы шутите? Вопросы по лог4ж? Впервые слышу что кто-то такое спрашивает.
Log4j2 вышел еще год назад, но что то в вакансиях никто даже и не упоминает его.
Наверное по той же причине по которой не вписывают guava, commons и тд. Это всего лишь библиотека. Взял и используешь, порог входа 0.

Я абсолютно не шучу. Понимание и интерес к тому как человек пишет логи — это одна из. Или вы думаете на собеседовании вас будут про мячи в автобусе спрашивать или что такое абстрактный класс? Вполне могут спросить про уровни логирования, и в чем отличие slf4j от log4j, из чего состоит log4j и так далее

За 10 лет ни разу не спросили + сам я таких вопросов при поиске никогда не задавал и не задаю, так такой вопрос не даст мне никакого знания об кандидате.

То, что вас не спрашивали о логах и/или вы не задавали подобных вопросов не говорит о потенциальной возможности не получить такой вопрос на собеседовании.

А вопросы про логировании дают много знаний про кандидата:

  1. о том как он пишет и структурирует код
  2. о том как кандидат понимает приоритетность той или иной бизнес логики
  3. о том как кандидат будет относится к логированию уже на ВАШЕМ проекте

Чтобы это все узнать достаточно дать человеку небольшую задачу по написанию кода. А на словах легко обмануть или ввести в заблуждение.

Вы заставите писать логи у вас на собеседовании? :)
Мне кажется дискуссия ушла в плоскость личного мнения.

Вы заставите писать логи у вас на собеседовании? :)
Нет =).
Мне кажется дискуссия ушла в плоскость личного мнения.
Да, пора сворачиватся =).
С логингом такой проблемы нету если не использовался кастомный код. Заменить логер дело 10 минут. Так что тут это скорее вопрос желания и мотивации.

если бы всё было так просто :)

В чем сложность если нету кастомного кода? Мне реально интересно, может я чего-то не понимаю.

Да нет никакой сложности, вопрос в том, что если есть большой проект, который работает годами, какой смысл перелопачивать тонны кода, чтобы заменить работающее решение новомодным, если выгоды из этого абсолютно никакой.

Огромное спасибо за данный цикл статей, нашёл для себя много интересного и полезного
Автору — честь и хвала =)

За проделаннуй работу спасибо. (Работа полезна, ибо за бесполезную я бы спасибо не говорил :) )
.
Но есть одно довольно важное «но», __особенно для новичков__:
Цыкл статей больше про «полезные ресурсы» чем «руководство к действию».
С одной стороны не рассмотрены такие предствители «кровавого энтерпрайза» как JSF, WebSphere, JBoss, Perforce, ClearCase; с другой стороны есть довольно «новомодные» для энтерпрайза Git, GWT, REST, BDD. Есть и топики явно не для новичка, та же книга по Tomcat человеку ниже чем «уверенный мидл» будет излишня, скорее всего.

Расу мы уже выбрали, поэтому давайте определимся с классом.
Разбивка на классы так же довольно спорная.
Тот же джаваскрипт это в большенстве случаев будет обязательным. JMS и Weblogic далеко не факт что понадобятся новичку, а вот JSF — это довольно вероятное попадалово в контексте энтерпрайза. GWT — так же все реже и реже попадается.
GWT — так же все реже и реже попадается.
В транке полным ходом идет работа по j2js компайлеру + интеграция с 3-d party js станет удобнее.
+ Если выстрелит Singular, то получим тот же Angular2 , только вместо typescript-a, привычная java.
Так что есть вероятность что будет чаще и чаще попадаться )
Так что есть вероятность что будет чаще и чаще попадаться )
Очень много если. Та и сложно вспомнить библиотеку которая бы выстрилила после переписывания на новую версию.
ГВТ не выстрелил как идея — «не нужно знать джаваскрипт, достаточно джавы», как показала практика «нужно знать джаваскрипт и особенности трансляции джавы в джаваскрипт».

Спасибо за комментарий и за оценку.

По поводу Websphere/JBoss и прочих технологий, которые были НЕ описаны в Enteprise: эти статьи — не справочник, просто среднее значение по больнице.

По поводу JSF. Мало того что JSF — это провал jcp (еще James Gosling об этом писал), так еще в вакансиях по DOU требования знаний по JSF эффективно стремится к нулю (из 144 вакансий). Не дезинформируйте новичков.

, просто среднее значение по больнице.
Если вы тут подразумиваете «не имеющее ничего общего с реальностью», то возможно.
Если речь о «наиболее частых случаях», то тут как раз ВебСфера и ДжБосс (WildFly вообще имеет хорошие перспективы) будут в топе, в основном из-за агресивной политики тех кто их продает.
По Украине красивых репортов не видел, посему только Мир www.indeed.com/...s, WebLogic, WebSphere&l=
так еще в вакансиях по DOU требования знаний по JSF эффективно стремится к нулю (из 144 вакансий). Не дезинформируйте новичков.
В теле обявления может быть название одной из реализаций, некоторые подразумивают JSF как часть стандарта J2EE/JEE. Аналогично Мир www.indeed.com/jobtrends?q=JSF, GWT&l=
Тот факт что JSF умирает для новых проектов, совсем не говорит что он умирает для аутсорса (скорее даже на оборот)
По поводу дезинформации, мои слова строятся в основном на моем опыте (JSF был озвучен в 90% энтерпрайзных вакансий). Если у вас есть объективные данные, то хорошо было бы их привести при оглашении таких обвенений (ДОУ — это далеко не показатель)

DOU — это как раз показатель, а не забугорные тенденции indeed.com

Я пишу статьи впервую очередь для начинающих разработчиков на Украине. Если гипотетически представить что по-любому будут спрашивать JSF в рамках J2EE — так давайте опишем все 50+ инструментов внутри. Это слишком притянуто за уши.

Мне абсолютно не важно что говорит indeed, monster, stack overflow — перед тем как начинать писать, я сделал выборку по DOU/Rabota.ua вакансиям, потому что именно они являются актуальными для наших ребят.

Очень круто. Читал все статьи и ждал эту, чтоб оценить, как говорится, исход :) Как и ожидал — все мегО понятно и структурно (как для меня).
Огномное, вам спасибо за труд. Лучи добра и позитива!
Всю подборку в мемориз отправил и начинаю шагать.

Подписаться на комментарии