Разработка enterprise-приложения на основе spring framework

67
9 апреля 2015 года Разработка Enterprise-приложения на основе Spring Framework: собираем конструктор Вячеслав Муравлев Ведущий Java-разработчик

Upload: custis

Post on 18-Jul-2015

133 views

Category:

Software


5 download

TRANSCRIPT

9 апреля 2015 года

Разработка Enterprise-приложения

на основе Spring Framework:

собираем конструктор

Вячеслав Муравлев

Ведущий Java-разработчик

Про компанию CUSTIS

2/67

Наша компания занимается:

проектированием,

3/67

Наша компания занимается:

…разработкой,

4/67

Наша компания занимается:

…внедрением,

5/67

Наша компания занимается:

…сопровождением,

6/67

Наша компания занимается:

…развитием

7/67

Наша компания занимается:

проектированием, разработкой, внедрением,

сопровождением, развитием…

…заказных информационных систем

на полном жизненном цикле

t8/67

Для

БанковТорговых сетей

Госкорпораций Предприятий ЖКХ

9/67

Структура компании

>200

10/67

Профессиональная инфраструктура

11/67

Отличники

12/67

Мальчики и девочки

13/67

О себе

Окончил ВМК МГУ в 2000 году

8 лет работал в inhouse-разработке

крупного банка (Java)

В CUSTIS пришел в 2012 году:

ведущий Java-гитарист разработчик

14/67

План семинара

Поговорим немного о Spring

Сделаем небольшой гешефт

по онлайн-продаже книг

Посмотрим на возможности Spring

из коробки для решения типовых задач

15/67

Pro Spring

16/67

Почему Spring?

Богатая история (более 11 лет)

Традиция

На фоне J2EE выглядел просто отпадно!

Много идей было перенесено в JEE (ver. >= 5)

Мощный, много возможностей (фактически,

альтернатива JEE)

Основан на правильных идеях (IoC)

Хорошая инструментальная поддержка (в IDE)

Широкое сообщество, много литературы

и материалов

Изящный

17/67

Краткое введение в Spring

Основной принцип – Inversion of Control (IoC)

Альтернативное название – Dependency Injection

Компоненты приложения:

Java Bean

Доступны только через интерфейсы

Spring выступает как контейнер

для компонентов

Предоставляет возможности для гибкой

настройки компонентов и их взаимосвязей

18/67

Как Spring собирает компоненты

19/67

Конфигурация компонентов

и взаимосвязей: DAO-компоненты

20/67

Конфигурация компонентов

и взаимосвязей: сервис с бизнес-логикой

21/67

Использование контекста приложения

22/67

Spring – это не только ценный мех

в виде DI-контейнера

…но и богатый набор инструментов

для работы практически со всеми аспектами жизни

Enterprise-приложения:

работа с данными (JDBC, JPA)

поддержка создания веб-приложений

работа с транзакциями

асинхронное взаимодействие

авторизация и аутентификация

batch и scheduling

aspect-oriented programming

23/67

Поехали!!

24/67

Магазин ACME Bookstore

Трехзвенное приложение:

СУБД PostgreSQL

Веб-сервер (возьмем Jetty)

Веб-клиент

Выбор книг из списка и оформление заказа

Административная часть:

Просмотр статистики

Загрузка списка книг

25/67

Инфраструктура проекта

Используем Maven3

IntelliJ IDEA 14 Ultimate

PostgreSQL 9.4

БД подготовлена заранее

Jetty 9.2.7

26/67

1. Закладываем основу

приложения со Spring Data

27/67

Создаем проект

Создаем сам проект в IDEA

Прописываем зависимости от Spring

Устанавливаем уровень языка 1.7

28/67

Создаем новый модуль

Для создания сущностей и основных

интерфейсов создадим модуль

bookstore-domain

Подключим Hibernate и Spring ORM

Настроим контекст Spring

Напишем тест

Настроим подключение к СУБД

Настроим JPA mapping

29/67

А теперь немного уличной магии

30/67

Шаблон «Репозиторий»

Экранирует бизнес-логику от технологии

работы с данными

Ограничивает и структурирует доступ

к данным

31/67

Используем волшебство Spring Data

Подключаем Spring Data

Создаем интерфейс репозитория и тест

Подключаем поддержку транзакций

Создаем custom-метод на основе запроса к БД

32/67

Наращиваем «мясо» –

создаем бизнес-логику

Создаем интерфейс бизнес-сервиса

и реализацию

Пишем тест

Подключаем в реализацию репозитории

из Spring Сontext

Подключаем реализацию как Spring Bean

33/67

2. Spring Batch:

наполни БД данными

34/67

«Мы это будем загружать из…»

В «кровавом» Enterprise никто не хочет

вести справочники вручную

Справочники грузят:

из СУБД других систем

файлов разнообразных форматов

очередей сообщений…

Возникают типовые задачи:

загрузка обновлений

журналирование работы

распараллеливание…

35/67

Spring batch macht frei

Разработан совместно с Accenture

Инфраструктура для запуска

и мониторинга пакетных задач

Сведение к минимуму boilerplate-кода

От разработчика нужна только логика

чтения, трансформации и записи данных

36/67

Spring Batch в картинках: архитектура

37/67

Spring Batch в картинках: Doing Job

38/67

Spring Batch в картинках: Step by Step

39/67

Положим немного книг на наши полки

В смысле напишем загрузку списка книг в БД

40/67

Загрузка списка книг

Список находится в файле CSV

Подключаем Spring Batch

Создаем компоненты для чтения и записи

Настраиваем инфраструктуру и job

Запускаем и загружаем список книг

41/67

Перерыв

42/67

3. Создаем веб-интерфейс

на Spring MVC

43/67

Spring MVC в одной картинке

44/67

Структура контекстов веб-приложения

45/67

Собираем нашу витрину

46/67

Подключаем Spring MVC

Создаем новый модуль bookstore-web

Подключаем Spring MVC зависимости

Настраиваем DispatcherServlet

для приложения

Для красоты приправим Twitter Boostrap

И запустим все это на Jetty

47/67

Отображаем список книг

Создаем контроллер

Реализуем логику загрузки книг

(с фильтром по жанру)

Создаем JSP-страницу со списком

Настраиваем ViewResolver

48/67

Формируем корзину с книгами

Создаем компонент для корзины

Добавляем в контроллер метод

для внесения книги в корзину

Создаем метод для отображения корзины

Создаем страницу для отображения

корзины

49/67

Оформляем заказ на книги

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

Реализуем логику формирования заказа

Реализуем логику загрузки всех заказов

Создаем страницу со списком заказов

50/67

4. Spring Scheduling:

работаем по расписанию

51/67

Spring Scheduling & Task Execution

Может использовать стандартные JDK Timers

и Quartz Scheduler

Гибкая настройка политики выполнения задач:

асинхронное

синхронное

с пулом thread’ов…

Запуск задач:

по расписанию (cron и периодически)

по триггерам

52/67

Настроим расписание

53/67

Мониторинг заказов

Будем собирать общую статистику

по заказам

Сборка статистики будет происходить

по расписанию

Просмотр статистики через веб-интерфейс

54/67

Сбор статистики

Создаем DashboardService

Используем JdbcTemplate

для сбора и обновления статистики

Создаем в веб-приложении

DashboardController с вызовом сервиса

Создаем страницу для просмотра

статистики

55/67

5. Spring AOP: проявляем гибкость

56/67

Spring AOP

Pure Java, runtime weaving

Аспекты настраиваются как обычные

Spring beans

По умолчанию используются JDK Proxies

(только интерфейсы)

Можно подключить CGLIB proxies

для классов

Поддержка транзакций в Spring

реализована с помощью AOP

57/67

Создадим аспект профилирования

Будем измерять время выполнения

метода

Подключим аспект к сбору статистики

Подключаем AOP-зависимости

Создаем ProfileDashboardActionsAspect

Настраиваем аспект в контексте domain-

context

58/67

6. Spring Security:

включаем безопасность

59/67

Почему Spring Security

Независимость от конкретного контейнера

Большой выбор протоколов аутентификации

Гибкий механизм авторизации

Типовые решения из коробки

60/67

Защитим лес от пожара веб-приложение

61/67

Подключаем Spring Security

Добавляем зависимости spring-security

В domain-context настраиваем

authentication-manager

Создаем новую сущность User

и репозиторий для нее

62/67

Дорабатываем веб-приложение

Cоздаем отдельный контекст

Настраиваем две политики:

зарегистрированные пользователи

администраторы системы

Настраиваем web.xml

Создаем страницу входа в систему

Создаем новый AdministrationController

Реализуем логику входа

Доработаем PurchaseController

для отображения текущего пользователя63/67

Дорабатываем бизнес-сервис

Дорабатываем формирование заказа –

используем текущего пользователя

Дорабатываем отображение заказа –

фильтруем по текущему пользователю

64/67

Резюме

Spring Framework – это отличное средство

для избавления от boilerplate-кода

Он содержит в себе решения

для повседневных задач разработчика

Enterprise-приложений

Решения очень гибко настраиваются

Прежде чем писать свой инструментарий –

внимательно смотрим в Spring!!!

65/67

Что почитать

Сайт Spring Framework

“Pro Spring” Clarence Ho, Bob Harrop

“Spring Recipes” Gary Mak, Josh Long,

and Daniel Rubio (сборник how-to)

Stackoverflow.com – вопросы и ответы

66/67

Спасибо!

Вопросы?

Вячеслав Муравлев

[email protected]

67/67