Многомодульный maven. Многопоточность. XML. Веб сервисы. Удаленное взаимодействие Регистрация Программа проекта Изменения проекта (Release Notes) Разработка полнофункционального многомодульного Maven проекта состоящего из 3-х веб приложений: приложение импорта из XML (JAXB, StAX, XPath, XSLT) многопоточного почтового веб-сервиса (JavaMail, java.util.concurrent, JAX-WS, MTOM, хендлеры авторизации, логирования и статистики) веб приложения отправки почты с вложениями по SOAP (JAX-WS, MTOM) по JAX-RS (Jersey) по JMS (ActiveMQ) через AKKA используя асинхронные сервлеты 3.0 сохранение данных в PostgreSQL используя jDBI миграция базы LiquiBase использование в проекте Guava, Thymleaf, Lombok, StreamEx, Typesafe Config, Java Microbenchmark JMH Требование к участникам Опыт программирования на Java. Базовые знания Maven. Необходимое ПО JDK8 Git IntelliJ IDEA Первое занятие: многопоточность. 1. Вступление. Многопоточность и параллельность. 2. Структура памяти Java. Ленивая инициализация. В видео в LazySingleton ошибка: должно быть как в коде проекта instance == null Структура памяти: куча, стек, 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 правка к видео: 22: completionService.submit(..) Все изменения в проекте будут делаться на основе патчей Скачайте 1_1_MailService.patch, положите его в проект, правой мышкой на нем сделайте Apply Patch ... Ресурсы (основы) 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 многопоточная реализация была быстрее однопоточной Подсказки по HW1 не делайте 1000 000 тасок, лучше их сделать крупнее у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (concurrentMultiply3). Мои результаты: Benchmark (matrixSize) Mode Cnt Score Error Units MatrixBenchmark.singleThreadMultiplyOpt 1000 ss 100 837,867 ± 25,530 ms/op MatrixBenchmark.concurrentMultiply2 1000 ss 100 394,294 ± 21,657 ms/op MatrixBenchmark.concurrentMultiply3 1000 ss 100 186,827 ± 11,882 ms/op Программа проекта Занятие 2 Разбор ДЗ (многопоточная реализация умножения матриц) Java Microbenchmark JMH (от Алексея Шипилева) Формат XML. Создание схемы XSD. Работа с XML в Java JAXB, JAXP StAX XPath XSLT Занятие 3 Разбор ДЗ (работа с XML) Обзор Guava Монады. flatMap SOA и Микросервисы Многомодульный Maven проект Занятие 4 Разбор ДЗ (реализация структуры проекта, загрузка и разбор xml) Thymleaf Maven. Поиск и разрешение конфликтов зависимостей Подключаем логирование с общими настройкам Библиотеки и фреймворки для работы с JDBC. Модуль persistence Занятие 5 Разбор ДЗ Сохранение в базу в batch-моде с обработкой конфликтов Вставка в несколько потоков Конфигурирование приложения (Typesafe config) Lombok Занятие 6 Разбор ДЗ (доработка модели и модуля export) Миграция DB Веб-сервисы (REST/SOAP) Java реализации SOAP Имплементируем Mail Service Занятие 7 Разбор ДЗ реализация MailSender сохранение результатов отправки в DB импорт Проектов и Групп Стили WSDL. Кастомизация WSDL Публикация кастомизированного WSDL. Автогенерация. Деплой в Tomcat Создание клиента почтового сервиса Реализация массовой и групповой отправки почты. HW7 Занятие 8 Разбор ДЗ Делаем общий mailService.wsdl Обновление WSDL Отправка почты из модуля webapp Доступ к переменным maven в приложении SOAP Exception. Выделение общей части схемы Коррекция схемы Занятие 9 Добавление мавен плагинов (copy-rename-maven-plugin, maven-antrun-plugin, liquibase-maven-plugin) Разбор ДЗ Реализация вложений в веб-сервисе Подключение MTOM Реализация загрузки вложений в модуле webapp Реализация вложений в почте JAX-WS Message Context. Авторизация JAX-WS Handlers (логирование SOAP) Домашнее задание. Статистика Занятие 10 Разбор ДЗ Реализация SOAP handlers Конфигурирование сервисов JavaEE JAX-RS. Интеграция с Jersey JMS. Интеграция с ActiveMQ Занятие 11 Авторизация в контейнере Tomcat Отправка почты с вложениями по JAX-RS по JMS Рефакторинг. Эксепшены в лямбдах Java 8 Concurrent and distributed applications toolkit AKKA Отсылка почты через AKKA Actors (Typed и Untyped Actors) Асинхронные сервлеты 3.0 Домашнее задание Разбор решения с асинхронными сервлетами Выбор языка программирования