Skip to content

Riafka/masterjava

 
 

Repository files navigation

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

Разработка полнофункционального многомодульного 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.

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

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

Concurrent vs Parallel

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

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

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

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

правка к видео: 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
  • Домашнее задание
    • Разбор решения с асинхронными сервлетами
  • Выбор языка программирования

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 96.5%
  • HTML 1.9%
  • XSLT 1.4%
  • Batchfile 0.2%