Многопоточность. XML. Веб сервисы Регистрация на проект Разработка полнофункционального многомодульного Maven проекта веб приложение (Tomcat, JSP, jQuery) многопоточный почтовый сервиса (JavaMail, java.util.concurrent.*) и вспомогательные модули связь модулей через веб-сервисы (SOAP, JAX-WS) и по REST (JAX-RS) сохранение данных в RMDBS (H2) и динамическое конфигурирование модулей по JMX. Требование к участникам Опыт программирования на Java. Базовые знания Maven. Необходимое ПО JDK8 Git IntelliJ IDEA Выбирать Ultimate, 30 days trial (работа с JavaScript, Tomcat, JSP). Учебный ключ к Ultimate выдается на первом занятии. Первое занятие: многопоточность. 1. Вступление. Многопоточность и параллельность. 2. Структура памяти Java. Ленивая инициализация. Структура памяти: куча, стек, permanent/metaspace JVM изнутри - оптимизация и профилирование. Stack and Heap Дополнительно: Из каких частей состоит память java процесса. Permanent область памяти Java thread stack Размер Java объектов Ленивая инициализация Реализация Singleton в JAVA Double checked locking Initialization-on-demand holder idiom Подводные камни Singleton 3. Реализация многопоточности в Java Параллелизм в Java Монитор (синхронизация) Compare-and-swap Java Memory Model Синхронизация потоков Обзор java.util.concurrent.* Как работает ConcurrentHashMap Справочник по синхронизаторам java.util.concurrent.* Использование ThreadLocal переменных Николай Алименков — Прикладная многопоточность Can thread switching happen in the synchronized block? Tproger: Многопоточное программирование в Java 8 1. Параллельное выполнение кода с помощью потоков 2. Синхронизация доступа к изменяемым объектам 3. Атомарные переменные и конкурентные таблицы 4. Реализация многопоточной отправки писем. Execution Framework Ресурсы (основы) Intuit, Потоки выполнения. Синхронизация Алексей Владыкин, Основы многопоточность в Java Виталий Чибриков, Java. Многопоточность Computer Science Center, курс Параллельное программирование Юрий Ткач, курс Advanced Java - Concurrency Головач, курс Java Multithreading Вступительное задание Вычекать этот проект: git clone https://github.com/JavaOPs/masterjava.git Применить оптимизацию к MatrixUtil.singleThreadMultiply Реализовать метод MatrixUtil.concurrentMultiply, позволяющий многопоточно перемножать квадратные матрицы N*N. Количество дочерних потоков ограничено MainMatrix.THREAD_NUMBER. Добиться того, чтобы на матрице 1000*1000 многопоточная реализация была быстрее однопоточной Программа курса возможны изменения, окончательная программа будет перед стартом курса Concurrent and Parallel Programming Thread safety. Java Memory Model/ JSR 133. Happens-before. Публикация объектов. Использование ThreadLocal переменных Initialization on demand holder / Double-checked locking Обзор java.util.concurrent.* Microbenchmarking JMH XML технологии формат XML. XSD, XPath, XSL(T) Java API for XML: DOM, SAX, StAX, XSLT Сервис-ориентированная архитектура, Микросервисы JMS, альтернативы Варианты разворачивания сервисов. Работа с базой. Связывание сервисов. Maven. Многомодульный Maven проект Build Lifecycle Dependency Mechanism Зависимости, профили, написание плагина The Reactor. Snapshots Создание/тестирование веб-приложения. Сборка, запуск, локальный и удаленный debug проекта, способы деплоя в Tomcat tomcat7-maven-plugin Веб-сервисы Веб-сервисы. SOAP. Преимущества/недостатки веб-сервисов. Расширения. Реализация веб-сервисов в Java. JAX-RPC, JAX-WS. Стили WSDL Создание API и реализации веб-сервиса MailService. Деплой и тестирование через SoapUI. Доработка веб-сервиса. Кастомизация WSDL. Работа с JAXB. Передача по SOAP Exception Включение wsdl в сервис для публикации. Генерация java кода по WSDL Реализация клиент веб-сервиса. Публикация веб сервиса из main(). Дабавление wsdl Выделение из wsdl общей части Создание клиента почтового сервиса. Тестирование с помощью JUnit 4 Интеграционное тестирование, maven-failsafe-plugin JAX-WS Handlers Logical/protocol handlers. Логирование SOAP на стороне клиента. Логирование и статистика трафика опубликованного веб-сервиса. wsimport binding. SoapHandler аутентификация. Добавляем файлы вложения. Mail-Service. Создаем вложения почты Генерация обновленного WSDL через wsgen Веб-сервисы: JAX-WS attachment with MTOM Тестирование вложений через SoapUi. Загрузка файлов. Стандарт MIME. Обрабатываем вложения на форме: commons-fileupload Загрузка файла вместе в полями формы. Вызов клиента с вложениями. Персистентность. NoSQL or RDBMS. Обзор NoSQL систем. CAP Обзор Java persistence solution: commons-dbutils, Spring JdbcTemplate, MyBatis, JOOQ, ORM (Hibernate, TopLink, ElipseLink, EBean used in Playframework). JPA. JPA Performance Benchmark Работа с базой: создание базы, настройка IDEA Database. Работа с DB через DataSource, настройка tomcat. HikariCP Настройка работы с DataSource из JUnit. REST веб сервис. JAX-RS. Интеграция с Jersey Поддержка Json. Jackson Асинхронность. @OneWay vs Java Execution framework Добавление в клиенте асинхронных вызовов. Асинхронные сервлеты 3.x в Tomcat Динамическое конфигурирование. JMX Maven Groovy cкрптинг. groovy-maven-plugin Настройка Tomcat на удаленное администрирование по JMX Проблема MemoryLeak. Поиск утечки памяти.