Митап_2017_11_18_доклад_2.pptx
- Количество слайдов: 80
Разработка проекта на Java EE без изобретения велосипеда
Пару слов не о велосипедах… Артем Ларин – Senior Java Developer (fullstack), работал в СБТ в 2015 -17 гг. Константин Кеглев – Java Developer (fullstack), работает в СБТ
История из жизни… Резюме: Frontend: Angular. JS, React. JS, Backbone, Bootstrap, etc Backend: Java EE, Spring БД: SQL, no. SQL (Cassandra), распределенные системы, Redis, Hazelcast, Grid. Gain, высокая нагрузка Текущая позиция: Team Lead Проект вышел на production
Вопрос Как?
Ответ Никак!
История из жизни… Проект вышел на production? ? ?
История из жизни… Как спасти человечество? ? ?
Личный опыт ВЕЛОСИПЕДОСТРОЕНИЯ в Java № Велосипед Стандартное решение 1 Надстройка над ORM (например над Не пишите надстройки Hibernate) 2 Работа с БД без ORM Spring JDBCTemplate 3 Кастомная валидация JSR 303 (Bean Validation) 4 Кастомное кеширование eh. Cache, Grid. Gain, etc 5 Собственная система «визардов» Spring Web. Flow 6 Собственный фреймворк для «фронтенда» Backbone. js, Angular. JS, React, etc 7 Автоматизация построения GUI Angular UI, Jquery UI, GWT, etc
Возможные области велосипедостроения Spring Security Performance Cache HTTPS Security Web Cache JTA Validation Multi-user access Valdr Boilerplate code Bean Validation Architecture JTA Optimistic Locking Lombok Spring Data
С чего начинается работа над проектом?
С чего начинается работа над проектом?
Архитектура Architecture
Архитектура Architecture
Спагетти-код Architecture
Лазанья-код Architecture
Перестановка слоев в лазанья-коде Architecture Diff?
Цикл Architecture
Как правильно? Architecture
Энтони Гонсалвес Architecture Системный архитектор, участник комитета JCP (Java EE 6, JPA 2. 0, EJB 3. 1)
Единая картина Enterprise-приложения Architecture
Где найти книгу? Architecture
Архитектура Enterprise по Фен-Шую Architecture
Достоинства стандартной Enterprise-архитектуры Четкое разделение обязанностей Отсутствие циклов Расширяемость Поддерживаемость Простота реализации Architecture
Недостатки стандартной Enterprise-архитектуры Architecture «Псевдо-ООП» - анемичная доменная модель размазывает поведение по слою бизнес-логики
«Псевдо-ООП» в Java Enterprise? Вчерашняя рассылка Dzone… Architecture
Безопасность Security
Security
Security
Безопасность трафика Security
Security
Многопользовательский режим Multi-user access
Что такое многопользовательский режим Multi-user access
Много одновременно работающих пользователей! Multi-user access
Распространенный способ решения этой проблемы Multi-user access
Проблемный сценарий: Оптимистическая блокировка Multi-user access Время Пользователь 1 Пользователь 2 1 Открыл веб-страницу «Товар А» 2 Указал новую цену 1000 руб. Отвлёкся на минуту…. 3 Нажал «Сохранить» Указал новую цену 1200 руб. 4 Сервер сохранил в БД цену 1000 руб. для товара А Нажал «Сохранить» 5 6 Сервер сохранил в БД цену 1200 руб. для товара А (перетерев цену первого пользователя) Если заметил, то удивился, зарепортил баг
Валидация Validation
Стандартная задача: реализовать валидацию Validation
Валидация данных на клиенте Написать код проверки полей только на стороне клиента Validation
Валидация данных на сервере Написать код проверки полей только на стороне сервера Validation
«Велосипедная» реализация валидации Validation 1. Написать код проверки полей на стороне клиента (в браузере, на языке Java. Script) 2. Написать код проверки на стороне сервера (на Java) – (как правило, продублировать из п. 1)
JSR 303 Bean Validation Код JPA-сущности Validation
JSR 303 Bean Validation Код REST-контроллера:
JSR 303 Bean Validation Ограничение Приемлемые типы Описание Assert. False Assert. True Boolean Ограничение Приемлемые типы Описание Decimal. Max Decimal. Min Big. Decimal, Big. Integer, Char. Sequence, byte, short, int, long и соответствующие обертки Элемент должен быть меньше или больше указанного значения Future Past Max Min Null Not. Null Pattern Calendar, Date Digits Size Аннотированный элемент должен возвращать значение true или false Validation Аннотированный элемент должен быть датой в прошлом или будущем Big. Decimal, Big. Integer, byte, short, int, long и Элемент должен быть меньше или больше их обертки указанного значения Object Аннотированный элемент должен быть равен или не равен нулю Char. Sequence Элемент должен соответствовать указан- ному регулярному выражению Big. Decimal, Big. Integer, Char. Sequence, byte, Аннотированный элемент должен быть числом short, int, long и соответствующие обертки в допустимом диапазоне Object[], Char. Sequence, Collection<? >, Map<? , ? > Размер элемента должен укладываться в указанные границы
А как работает это вместе? Validation Клиент Страница valdr. js valdr-messages Сервер dependency web. xml
А как работает это вместе? Validation Клиент Страница valdr. js valdr-messages Сервер dependency web. xml
Какой путь выберешь ты? Validation
Вопросы производительности Performance
LDAP для хранения корпоративных пользователей Performance
LDAP для хранения корпоративных пользователей Performance
LDAP для хранения корпоративных пользователей Performance Как ускорить работу LDAP?
JSR 107 (JCACHE - Java Temporary Caching API) Performance Метод сервиса с кэшируемой операцией:
Performance Очистка кэша. Endpoint: POST http: //project. ru/invalidate. Cache
Performance Очистка кэша:
Performance Кеширование веб-ресурсов
Без отпечатков Performance В чем проблемы такого решения?
Performance Недостатки без кеширования: 1. Без кеширования – низкая производительность 2. С серверным кешированием: Непредсказуемое поведение механизмов
Что такое отпечаток (fingerprint) Performance Изменили файл Отпечаток изменился
С отпечатками Performance Проект версии 1. 0 (файлы закешировались)
С отпечатками Performance Проект версии 1. 1 (изменились md 5 -имена у измененных файлов, И только они скачались заново)
Как добавить отпечатки (fingerprints) Шаг 1: web. xml Performance
Шаг 2: Настроить Resource. Resolver Performance
Шаг 3: В статичных ресурсах использовать теги spring: url Performance На этапе конвертации JSP в HTML Spring добавляет MD 5 отпечатки на основе содержимого файлов
Как это выглядит в браузере (консоль F 12) Performance
Шаблонный код Boilerplate code
Что такое “boilerplate”?
Класс с геттерами и сеттерами…. Boilerplate code – это много стандартного кода для выполнения минимальной задачи.
Добавим еще 3 поля… Boilerplate code
Подключим в pom. xml проект Lombok Boilerplate code
Black magic! Boilerplate code теперь не нужен! Boilerplate code
Boilerplate code Некоторые полезные аннотации Lombok: @All. Args. Constructor @Equals. And. Hash. Code @Builder @Singleton
@Singleton Boilerplate code Возможные проблемы самописных «велосипедных» синглтонов: 1. Ошибки с многопоточностью (проблема double-checked locking) 2. Разные подходы к реализации синглтона в рамках одного проекта
@Singleton Boilerplate code
“Delombok” Плагин Lombok/Delombok Boilerplate code
@Singleton Boilerplate code Аналогичный код Java
Заключение… 1. Читайте книги 2. Изучайте JSR-спецификациии 3. Применяйте их на практике!
Кент Бек
Кент Бек «Тесты …превращают страх в скуку»
Вывод Спеки превращают страх в скуку
https: //vk. com/Sber. Tech. Rzn to be continued…
artem. larin@gmail. com knkeglev. sbt@sberbank. ru 18 ноября 2017 г.
Митап_2017_11_18_доклад_2.pptx