Продолжая использовать наш сайт, вы даете согласие на обработку файлов cookie, которые обеспечивают правильную работу сайта. Благодаря им мы улучшаем сайт!
Принять и закрыть

Читать, слущать книги онлайн бесплатно!

Электронная Литература.

Бесплатная онлайн библиотека.

Читать: Изучаем Java EE 7 - Энтони Гонсалвес на бесплатной онлайн библиотеке Э-Лит


Помоги проекту - поделись книгой:

Энтони Гонсалвес

Изучаем Java EE 7

2014

Antonio Goncalves

Beginning Java EE 7

Научный редактор О. Сивченко

Переводчики О. Сивченко, В. Черник

Технический редактор Н. Гринчик

Литературные редакторы Н. Гринчик, В. Конаш

Художники Л. Адуевская, А. Барцевич, Н. Гринчик

Корректоры Н. Гринчик, Е. Павлович

Верстка А. Барцевич

Copyright © 2013 by Antonio Goncalves

© Перевод на русский язык ООО Издательство «Питер», 2014

© Издание на русском языке, оформление ООО Издательство «Питер», 2014

* * *

Предисловие

Java EE 7 основана на предыдущих успешных версиях этой платформы. Упрощенный API сервиса сообщений Java значительно повышает продуктивность разработчика, широкое использование контекстов и внедрения зависимостей (CDI) и сокращение шаблонного кода обеспечивают более связанную интегрированную платформу. Java EE 7 также включает такие технологии, как WebSocket, JSON, Batch и Concurrency, весьма существенные для современной разработки веб-приложений. Все это сокращает необходимость в сторонних фреймворках, значительно облегчая приложения.

Энтони сыграл очень важную роль в формировании платформы Java EE 7. Благодаря своим глубоким техническим знаниям он принял активное участие в составлении спецификаций во время двух ключевых запросов на спецификацию Java (платформа и Enterprise JavaBeans 3.2). В документах он выделил несколько пунктов, что сделало их более простыми для понимания. Он также участвовал в разъяснительных совещаниях при поддержке комитета Java Community Process (JCP), а также входил в состав данного комитета.

Энтони возглавляет парижскую группу пользователей Java; работая консультантом, он использует Java EE для решения повседневных проблем. С энтузиазмом и преданностью своему делу он проводит конференцию Devoxx France. Кроме того, несколько лет назад он написал книгу о Java EE 5 на французском языке, а после — получившую высокое признание книгу «Введение в платформу Java EE 6 с GlassFish 3» (Beginning Java EE 6 Platform with GlassFish 3). Благодаря этому Энтони стал наилучшим кандидатом на авторство данной книги.

Книга содержит несколько практических примеров кода, с которых можно начать изучение. Для развертывания примеров используется GlassFish, но также подойдет любой сервер приложений, совместимый с Java EE 7. Все представленные образцы кода также доступны на GitHub. Если вы искали практический учебник, написанный одним из экспертов по этой платформе, названный источник вам подойдет.

Арун Гупта, специалист по Java EE и GlassFish

Об авторе


Энтони Гонсалвес — старший системный архитектор из Парижа. Выбрав Java-разработки основным направлением своей карьеры в конце 1990-х, он с тех пор посетил множество стран и компаний, где теперь работает консультантом по Java EE. В прошлом консультант компании BEA, Энтони является экспертом по таким серверам приложений, как WebLogic, JBoss и, конечно же, GlassFish. Он приверженец решений с открытым исходным кодом и даже принадлежит к парижскому объединению разработчиков таких решений (OSSGTP). Энтони также является одним из создателей и руководителей парижской группы пользователей Java, а с недавних пор еще и конференции Devoxx France.

Свою первую книгу по Java EE 5 на французском языке Энтони написал в 2007 году. Тогда же он присоединился к комитету JCP, чтобы стать экспертом в различных запросах на спецификацию Java (Java EE 6, JPA 2.0 и EJB 3.1), и выпустил книгу «Изучаем Java EE 6» (Beginning Java EE 6) в издательстве Apress. Оставаясь членом комитета JCP, в 2010 году Энтони присоединился к экспертным группам по Java EE 7 и EJB 3.2.

За последние несколько лет Энтони выступал с докладами преимущественно по Java EE на международных конференциях, включая JavaOne, Devoxx, GeeCon, The Server Side Symposium, Jazoon, а также во многих группах пользователей Java. Он также написал множество технических документов и статей для IT-сайтов (DevX) и журналов (Programmez, Linux Magazine). C 2009 года он входил в состав французского Java-подкаста под названием Les Cast Codeurs. За все свои заслуги перед Java-сообществом Энтони был выбран Java-чемпионом.

Энтони окончил Парижскую консерваторию искусств и ремесел (по специальности «Инженер информационных технологий»), Брайтонский университет (со степенью магистра точных наук по объектно-ориентированному проектированию) и Федеральный университет Сан-Карлоса в Бразилии (магистр философии по распределенным системам).

Вы можете подписаться на страницу Энтони в «Твиттере» (@agoncal) и в его блоге (www.antoniogoncalves.org).

О техническом редакторе


Массимо Нардоне получил степень магистра точных наук в области информатики в Университете Салерно, Италия. В настоящее время он является сертифицированным аудитором PCIQSA и работает старшим ведущим архитектором по IT-безопасности и облачным решениям в компании IBM в Финляндии, где в его основные обязанности входит облачная и IT-инфраструктура, а также контроль и оценка надежности системы защиты. В IBM Массимо также руководит финской командой исследовательских разработок (FIDTL). Имеет следующие IT-сертификаты: ITIL (Information Technology Infrastructure Library), Open Group Master Certified IT Architect и Payment Card Industry (PCI) Qualified Security Assessor (QSA). Он является экспертом в области закрытых, открытых и локальных облачных архитектур.

У Массимо более 19 лет опыта в области облачных решений, IT-инфраструктуры, мобильных и веб-технологий и безопасности как на национальных, так и на международных проектах на должностях руководителя проекта, инженера-программиста, инженера исследовательского отдела, главного архитектора по безопасности и специалиста по программному обеспечению. Он также был приглашенным лектором и методистом по практическим занятиям в Лаборатории сетевых технологий Хельсинкского политехнического института (впоследствии вошедшего в состав Университета Аалто).

Массимо хорошо владеет методологиями и приложениями для тестирования протоколов безопасной передачи данных, а также занимается разработками мобильных и интернет-приложений с использованием новейших технологий и многих языков программирования.

Массимо был техническим редактором множества книг, издающихся в сфере информационных технологий, например по безопасности, веб-технологиям, базам данных и т. д. Он обладает несколькими международными патентами (PKI, SIP, SAML и Proxy areas).

Он посвящает эту книгу своей любимой жене Пии и детям Луне, Лео и Неве.

Благодарности

Вы держите в руках мою третью книгу о платформе Java EE. Должен вам сказать, для того чтобы написать третью по счету книгу, надо быть немного ненормальным… а еще находиться в окружении людей, которые помогают вам чем могут (чтобы вы не сошли с ума окончательно). Самое время сказать им спасибо.

Прежде всего, я хочу поблагодарить Стива Англина из издательства Apress за очередную предоставленную мне возможность написать книгу для этой замечательной компании. В процессе ее написания мне постоянно приходилось сотрудничать с Джилл Балзано, Катлин Саливан и Джеймсом Маркхемом, которые редактировали книгу и давали мне ценные советы. Спасибо Массимо Нардоне за тщательную техническую проверку, позволившую улучшить книгу.

Отдельное спасибо ребятам из моей технической команды, которые помогали мне и давали ценные комментарии. Алексис Хасслер живет в Божоле во Франции; он программист-фрилансер, тренер и руководитель группы пользователей Java в Лионе. Брис Лепорини — опытный инженер, в последние десять лет специализируется на Java-разработках. Он обожает запускать новые проекты, повышать производительность приложений и обучать начинающих программистов. Мэтью Анселин — разработчик, который любит Java, виртуальную машину Java, свой Mac-бук и свою гитару, а также входит в состав экспертной группы по инструментарию CDI 1.1 и работает с CDI по технологии OSGi. Антуан Сабо-Дюран, старший инженер-программист в компании Red Hat и технический руководитель на фреймворке Agorava, внес существенный вклад в развитие проектов с использованием CDI. Я с большим удовольствием работал с такими компетентными и веселыми старшими разработчиками.

Я также хочу поблагодарить Юниса Теймури, совместно с которым была написана глава 12 о XML и JSON.

Для меня большая честь, что предисловие к этой книге написал Арун Гупта. Его вклад в Java EE бесценен, как и его технические статьи.

Спасибо моему корректору Трессану О’Донахью, благодаря усилиям которого книга приобрела литературный язык.

Схемы, приведенные в этой книге, были составлены в приложении Visual Paradigm. Я хочу поблагодарить сотрудников Visual Paradigm и JetBrains за бесплатную лицензию на их замечательные продукты.

Я крепко целую любимую дочь Элоизу. Она — мой самый большой подарок в жизни.

Я не написал бы эту книгу без помощи и поддержки всего сообщества Java-разработчиков: блогов, статей, рассылок, форумов, твитов… и, в частности, без тех, кто занимается платформой Java EE.

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

Я также часто вспоминаю друга Бруно Реау, который покинул нас так рано.

Введение

В сегодняшнем мире бизнеса приложения должны осуществлять доступ к данным, реализовывать бизнес-логику, добавлять уровни представления данных, быть мобильными, использовать геолокацию и взаимодействовать с внешними системами и онлайн-сервисами. Именно этого пытаются достичь компании путем минимизации затрат и применения стандартных и надежных технологий, которые могут справляться с большими нагрузками. Если это ваш случай, данная книга — для вас.

Среда Java Enterprise Edition появилась в конце 1990-х годов и привнесла в язык Java надежную программную платформу для разработок корпоративного уровня. J2 EE, хоть и составляла конкуренцию фреймворкам с открытым кодом, считалась достаточно тяжеловесной технологией, была технически перенасыщенной, и каждая ее новая версия подвергалась критике, неправильно понималась или использовалась. Благодаря этой критике Java EE была усовершенствована и упрощена.

Если вы относитесь к числу людей, которые по-прежнему считают, что «архитектуры EJB — это зло», прочитайте эту книгу, и вы измените свое мнение. Архитектуры Enterprise Java Beans просто прекрасны, как и весь стек технологий Java EE 7. Если же вы, наоборот, адепт Java EE, то в книге вы увидите, как эта платформа обрела равновесие благодаря простоте разработки и несложной компонентной модели. Если вы начинающий пользователь Java EE, эта книга вам также подойдет: в ней очень понятно описываются наиболее важные спецификации, а также для наглядности приводится много примеров кода и схем.

Открытые стандарты являются в совокупности одной из наиболее сильных сторон Java EE. Теперь не составляет труда портировать прикладные программы между серверами приложений. Диапазон технологий, применяемых при написании этих программ, включает JPA, CDI, валидацию компонентов (Bean Validation), EJB, JSF, JMS, SOAP веб-службы либо веб-службы с передачей состояния представления (RESTful). Открытый исходный код — еще одна сильная сторона Java EE. Как вы увидите далее в книге, большинство базовых реализаций Java EE 7 (GlassFish, EclipseLink, Weld, Hibernate Validator, Mojarra, OpenMQ, Metro и Jersey) лицензируются как свободно распространяемое ПО.

Книга посвящена инновациям последней версии, различным спецификациям и способам их сочетания при разработке приложений. Java EE 7 включает около 30 спецификаций и является важным этапом разработок для корпоративного уровня (CDI 1.1, Bean Validation 1.1, EJB 3.2, JPA 2.1), для веб-уровня (Servlet 3.1, JSF 2.2, Expression Language 3.0) и для интероперабельности (JAX-WS 2.3 и JAX-RS 2.0). Издание охватывает большую часть спецификаций по Java EE 7 и использует инструментарий JDK 1.7 и некоторые известные шаблоны проектирования, а также сервер приложений GlassFish, базу данных Derby, библиотеку JUnit и фреймворк Maven. Издание изобилует UML-схемами, примерами Java-кода и скриншотами.

Структура книги

Книга посвящена наиболее важным спецификациям по Java EE 7 и новому функционалу этого релиза. Структура издания повторяет архитектурное выделение уровней в приложении.


В главе 1 приводятся основные понятия Java EE 7, которые далее обсуждаются в книге. Глава 2 посвящена контексту и внедрению зависимости (Context и Dependency Injection 1.1), а глава 3 — валидации компонентов (Bean Validation 1.1).

Главы 4–6 описывают уровень сохраняемости и подробно рассматривают интерфейс JPA 2.1. После краткого обзора и нескольких практических примеров в главе 4 глава 5 полностью посвящена объектно-реляционному отображению (атрибутам отображения, отношениям и наследованию), а глава 6 — тому, как вызывать сущности и управлять ими, их жизненному циклу, методам обратного вызова и слушателям.

Для разработки транзакций на уровне бизнес-логики на Java EE 7 может использоваться архитектура EJB. Главы 7–9 описывают этот процесс. После обзора спецификации и истории ее создания в главе 7 идет речь о компонент-сеансах EJB и модели их разработки. Глава 8 посвящена жизненному циклу архитектуры EJB, службе времени и способам обращения с авторизацией. Глава 9 объясняет понятие транзакций и то, каким образом интерфейс JTA переводит транзакции в EJB, а также в CDI-компоненты.

В главах 10 и 11 описано, как ведется разработка уровня представления данных с помощью фреймворка JSF 2.2. После обзора спецификации в главе 10 речь идет о разработке веб-страницы с помощью компонентов фреймворков JSF и Facelets. В главе 11 рассказывается о способах взаимодействия с серверной частью архитектуры EJB и поддерживающими CDI-компонентами, а также о навигации по страницам.

Наконец, последние главы предлагают различные способы взаимодействия с другими системами. В главе 12 объясняется, как обрабатывать XML (используя интерфейсы JAXB и JAXP) и JSON (JSON-P 1.0). Глава 13 показывает, как обмениваться асинхронными сообщениями с новым интерфейсом JMS 2.0 и компонентами, управляемыми сообщениями. Глава 14 посвящена веб-службам SOAP, а глава 15 — веб-службам RESTful с новым интерфейсом JAX-RS 2.0.

Скачивание и запуск кода

Для создания примеров, приводимых в этой книге, использовался фреймворк Maven 3 и комплект Java-разработчика JDK 1.7 в качестве компилятора. Развертывание осуществлялось на сервере приложений GlassFish версии 4, а сохранение данных — в базе Derby. В каждой из глав объясняется, как построить, развернуть, запустить и протестировать компоненты в зависимости от используемой технологии. Код тестировался на платформе Mac OS X (но также должен работать в Windows или Linux). Исходный код примеров к этой книге размещен на странице Source Code на сайте Apress (www.apress.com). Загрузить его можно прямо с GitHub по адресу https://github.com/agoncal/agoncal-book-JavaEE7.

Связь с автором

Вопросы по содержанию этой книги, коду либо другим темам отправляйте автору на электронную почту antonio.goncalves@gmail.com. Вы также можете посетить его сайт www.antoniogoncalves.org и подписаться на его страницу в «Твиттере»: @agoncal.

От издательства

Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты vinitski@minsk.piter.com (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.

Глава 1. Краткий обзор Java EE 7

Сегодняшние предприятия существуют в условиях мировой конкуренции. Им нужны приложения, отвечающие их производственным нуждам, которые, в свою очередь, с каждым днем усложняются. В эпоху глобализации компании могут действовать по всему миру, имея представительства на разных континентах, работать в различных странах круглосуточно, без выходных, иметь по несколько центров обработки данных и международные системы, работающие с разными валютами и временными зонами. При этом им необходимо сокращать расходы, увеличивать быстродействие своих сервисов, хранить бизнес-данные в надежных и безопасных хранилищах, а также иметь несколько мобильных и веб-интерфейсов для клиентов, сотрудников и поставщиков.

Большинству компаний необходимо совмещать эти противоречивые требования с существующими корпоративными информационными системами (EIS), одновременно разрабатывая приложения типа «бизнес — бизнес» для работы с партнерами или системы типа «бизнес — потребитель» с использованием мобильных приложений, в том числе с возможностью геолокации. Довольно часто компании требуется координировать корпоративные данные, которые хранятся в разных местах, обрабатываются несколькими языками программирования и передаются с помощью разных протоколов. И конечно же, во избежание серьезных убытков необходимо предотвращать системные сбои, сохраняя при этом высокую доступность, масштабируемость и безопасность. Изменяясь и усложняясь, корпоративные приложения должны оставаться надежными. Именно для этого была создана платформа Java Enterprise Edition (Java EE).

Первая версия Java EE (изначально известная как J2EE) предназначалась для решения задач, с которыми сталкивались компании в 1999 году, а именно для работы с распределенными компонентами. С тех пор программным приложениям пришлось адаптироваться к новым техническим решениям, таким как веб-службы SOAP и RESTful. На сегодняшний день платформа Java EE отвечает этим техническим требованиям, регламентируя различные способы работы в стандартных спецификациях. Спустя годы Java EE изменилась, стала насыщеннее и проще в использовании, а также более мобильной и интегрированной.

В этой главе будут представлены общие сведения о Java EE. После описания внутренней архитектуры, компонентов и сервисов я расскажу о том, что нового в Java EE 7.

Понимание Java EE

Если вам нужно произвести какие-то операции с наборами объектов, вы не разрабатываете для этого свою собственную хеш-таблицу; вы используете API коллекций (интерфейс программирования приложений). Точно так же, если вам требуется простое веб-приложение или безопасная, интероперабельная распределенная прикладная система, оперирующая транзакциями, вы не захотите разрабатывать низкоуровневые API-интерфейсы, а будете использовать платформу Java EE. Так же как платформа Java Standard Edition (Java SE) предоставляет API для работы с коллекциями, Java EE предоставляет стандартный способ работы с транзакциями через Java API для транзакций (JTA), с сообщениями через службу сообщений Java (JMS) и с сохраняемостью через интерфейс JPA. Java EE располагает рядом спецификаций, предназначенных для корпоративных приложений. Она может рассматриваться как продолжение платформы Java SE для более удобной разработки распределенных, надежных, мощных и высокодоступных приложений.

Версия Java EE 7 стала важной вехой в развитии платформы. Она не только продолжает традиции Java EE 6, предлагая более простую модель разработки, но и добавляет свежие спецификации, обогащая наработанный функционал новыми возможностями. Кроме того, контекст и внедрение зависимостей (CDI) становится точкой интеграции между всеми новыми спецификациями. Релиз Java EE 7 почти совпадает с 13-й годовщиной выпуска корпоративной платформы. Она объединяет преимущества языка Java и опыт последних 13 лет. Java EE выигрывает как за счет динамизма сообществ свободных разработчиков, так и за счет строгой стандартизации группы Java Community Process (JCP). На сегодняшний день Java EE — это хорошо документированная платформа с опытными разработчиками, большим сообществом пользователей и множеством развертываемых приложений, работающих на серверах компаний. Java EE объединяет несколько интерфейсов API, которые могут использоваться для построения стандартных компонентно-ориентированных многозвенных приложений. Эти компоненты развертываются в различных контейнерах, предлагая серию служб.

Архитектура

Java EE состоит из набора спецификаций, реализуемых различными контейнерами. Контейнерами называются средства среды времени выполнения Java EE, предоставляющие размещенным на них компонентам определенные службы, например управление жизненным циклом разработки, внедрение зависимости, параллельный доступ и т. д. Такие компоненты используют точно определенные контракты для сообщения с инфраструктурой Java EE и с другими компонентами. Перед развертыванием они должны упаковываться стандартным способом (повторяя структуру определенного каталога, который может быть сжат в архивный файл). Java EE представляет собой расширенный набор функций платформы Java SE, что означает, что API-интерфейсы Java SE могут использоваться любыми компонентами Java EE.

Рисунок 1.1 иллюстрирует логические взаимосвязи между контейнерами. Стрелками представлены протоколы, используемые одним контейнером для доступа к другому. Например, веб-контейнер размещает сервлеты, которые могут обращаться к компонентам EJB по протоколу RMI–IIOP.


Рис. 1.1. Стандартные контейнеры Java EE

Компоненты

В среде времени выполнения Java EE выделяют четыре типа компонентов, которые должна поддерживать реализация.

• Апплеты представляют собой приложения из графического пользовательского интерфейса (GUI), выполняемые в браузере. Они задействуют насыщенный интерфейс Swing API для производства мощных пользовательских интерфейсов.

• Приложениями называются программы, выполняемые на клиентской стороне. Как правило, они относятся к графическому пользовательскому интерфейсу (GUI) и применяются для пакетной обработки. Приложения имеют доступ ко всем средствам среднего звена.

• Веб-приложения (состоят из сервлетов и их фильтров, слушателей веб-событий, страниц JSP и JSF) выполняются в веб-контейнере и отвечают на запросы HTTP от веб-клиентов. Сервлеты также поддерживают конечные точки веб-служб SOAP и RESTful. Веб-приложения также могут содержать компоненты EJBLite (подробнее об этом читайте в гл. 7).

• Корпоративные приложения (созданные с помощью технологии Enterprise Java Beans, службы сообщений Java Message Service, интерфейса Java API для транзакций, асинхронных вызовов, службы времени, протоколов RMI–IIOP) выполняются в контейнере EJB. Управляемые контейнером компоненты EJB служат для обработки транзакционной бизнес-логики. Доступ к ним может быть как локальным, так и удаленным по протоколу RMI (или HTTP для веб-служб SOAP и RESTful).

Контейнеры

Инфраструктура Java EE подразделяется на логические домены, называемые контейнерами (см. рис. 1.1). Каждый из контейнеров играет свою специфическую роль, поддерживает набор интерфейсов API и предлагает компонентам сервисы (безопасность, доступ к базе данных, обработку транзакций, присваивание имен каталогам, внедрение ресурсов). Контейнеры скрывают техническую сложность и повышают мобильность. При разработке приложений каждого типа необходимо учитывать возможности и ограничения каждого контейнера, чтобы знать, использовать один или несколько. Например, для разработки веб-приложения необходимо сначала разработать уровень фреймворка JSF и уровень EJB Lite, a затем развернуть их в веб-контейнер. Но если вы хотите, чтобы веб-приложение удаленно вызывало бизнес-уровень, а также использовало передачу сообщений и асинхронные вызовы, вам потребуется как веб-, так и EJB-контейнер.

Java EE использует четыре различных контейнера.

• Контейнеры апплетов выполняются большинством браузеров. При разработке апплетов можно сконцентрироваться на визуальной стороне приложения, в то время как контейнер обеспечивает безопасную среду. Контейнер апплета использует модель безопасности изолированной программной среды («песочницы»), где коду, выполняемому в «песочнице», не разрешается «играть» за ее пределами. Это означает, что контейнер препятствует любому коду, загруженному на ваш локальный компьютер, получать доступ к локальным ресурсам системы (процессам либо файлам).

• Контейнер клиентского приложения (ACC) включает набор Java-классов, библиотек и других файлов, необходимых для реализации в приложениях Java SE таких возможностей, как внедрение, управление безопасностью и служба именования (в частности, Swing, пакетная обработка либо просто класс с методом main()). Контейнер ACC обращается к EJB-контейнеру, используя протокол RMI–IIOP, а к веб-контейнеру — по протоколу HTTP (например, для веб-служб).

• Веб-контейнер предоставляет базовые службы для управления и исполнения веб-компонентов (сервлетов, компонентов EJB Lite, страниц JSP, фильтров, слушателей, страниц JSF и веб-служб). Он отвечает за создание экземпляров, инициализацию и вызов сервлетов, а также поддержку протоколов HTTP и HTTPS. Этот контейнер используется для подачи веб-страниц к клиент-браузерам.



Поделиться книгой:

На главную
Назад