No description, website, or topics provided.
Java
Switch branches/tags
Nothing to show
Clone or download
Latest commit 4b3a183 Feb 22, 2018

README.md

Многомодульный maven. Многопоточность. XML. Веб сервисы. Удаленное взаимодействие

Регистрация

Программа проекта

Изменения проекта (Release Notes)

Разработка полнофункционального многомодульного Maven проекта

состоящего из 3-х веб приложений:

image

  • приложение импорта из 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.

Необходимое ПО

Первое занятие: многопоточность.

video 1. Вступление. Многопоточность и параллельность.

Concurrent vs Parallel

video 2. Структура памяти Java. Ленивая инициализация.

В видео в LazySingleton ошибка: должно быть как в коде проекта instance == null

Структура памяти: куча, стек, permanent/metaspace

Ленивая инициализация

video 3. Реализация многопоточности в Java

Tproger: Многопоточное программирование в Java 8

video 4. Реализация многопоточной отправки писем. Execution Framework

правка к видео: 22: completionService.submit(..)

Все изменения в проекте будут делаться на основе патчей

Скачайте 1_1_MailService.patch, положите его в проект, правой мышкой на нем сделайте Apply Patch ...


Ресурсы (основы)


hw Задание первого занятия

Вычекать этот проект: git clone https://github.com/JavaOPs/masterjava.git

  • Применить оптимизацию к MatrixUtil.singleThreadMultiply
  • Реализовать метод MatrixUtil.concurrentMultiply, позволяющий многопоточно перемножать квадратные матрицы N*N.
  • Количество дочерних потоков ограничено MainMatrix.THREAD_NUMBER.
  • Добиться того, чтобы на матрице 1000*1000 многопоточная реализация была быстрее однопоточной

error Подсказки по HW1

  • 1: не делайте 1000 000 тасок, лучше их сделать крупнее
  • 2: у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно
  • 3: наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (concurrentMultiply3). Тогда трансформация B не нужна. Мои результаты:
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
  • Домашнее задание
    • Разбор решения с асинхронными сервлетами
  • Выбор языка программирования