Skip to content

Latest commit

 

History

History
149 lines (124 loc) · 13.8 KB

File metadata and controls

149 lines (124 loc) · 13.8 KB

Онлайн проекта Masterjava.

hw Разбор домашнего задания HW3

4_1_HW3_pom_structure.patch

Вместо включения всех модулей в главный аггрегатор, сделал еще 2 аггрегатных модуля 2го уровня: web и services

ВНИМАНИЕ! после патча

  • проверьте правильность структуры проекта
  • сделайте mvn clean install
  • удалите пустые корневые каталоги src и upload (git не работает с каталогами)
  • переименуйте модули idea (Shift+F6), если отличаются от имени модуля Maven

structure

ВНИМАНИЕ! перед накаткой патча создайте в папке web проекта каталог \common-web\src, иначе патч промахивается.

4_2_HW3_thymeleaf_upload.patch

4_3_HW3_upload_servlet3.patch

  • Добавил проверку на отсутствие выбранного файла

Вопрос: если в загружаем большой файл, то он придет частями? В этом случае используем req.getParts() и у каждой части можно получить InputStream. А как все части файла собрать вместе и получить итоговый InputStream, который уже можно передать StAX-процессору?

Part это одно поле формы и на части уже не бъется. В @MultipartConfig можно через аттрибуты задать лимит fileSizeThreshold, когда входящий поток будет сохраняться в файле. Все происходит внизу Multipart API, InputStream из мы получаем также: filePart.getInputStream()

4_4_HW3_jaxb_stax.patch


  • Пример для сборки upload + mail-service + зависимости из корня проекта:
    mvn -pl services\mail-service,web\upload -am install
mvn dependency:tree
mvn project-info-reports:dependencies

4_5_dependencies.patch

mvn project-info-reports:dependency-convergence

4_6_fix_convergence.patch

4_7_enforcer.patch

mvn clean install
mvn -DincludeScope=runtime dependency:copy-dependencies
java -jar jar-hell.jar .
java -jar jhades-standalone-report.jar path/to/war/webapp.war
mvn dependency:analyze

4_8_logging.patch

  • Перенес подключение logback-test.xml из parent-web в parent (он используется в JUnit тестах, которые могут быть в любом модуле)
  • Добавил в корень проекта config_templates с копией конфигурации. Общие файлы конфигурации заданы в maven parent как в <masterjava.config>/apps/masterjava/config/</masterjava.config>. Нужно у себя в корне диска создать этот каталог и положить в него содержимое config_templates

UPDATE: c Maven 3.3.1 в переменной ${maven.multiModuleProjectDirectory} храниться рутовый каталог многомодульного проекта. Те мы можем создавать config и хранить его прямо в нашем репозитории (вместо config_templates) с путем

<masterjava.config>${maven.multiModuleProjectDirectory}/config/</masterjava.config>

Если в корне проекта сделать каталог .mvn, то эта переменная работает при сборке из зависимых модулей.

Выбор lightweight JDBC helper library

Tomcat Class Loader. Memory Leeks

4_9_context.patch

Cохранил конфигурацию Tomcat context.xml, в котором конфигурируется jdbc/masterjava. Ее надо будет положить в ${TOMCAT_HOME}/conf

ВНИМАНИЕ! перед накаткой патча создайте в корне проекта каталоги persist\src\main и persist\src\test, иначе патч промахивается.

4_10_persist.patch

hw Домашнее задание HW4

  • в модуле upload сохранить всех импортированных пользователей в базе (записи просто добавляются в таблицу users). Делать вставку группами (chunk) в batch моде. Количестово пользователей в chunk принимать с UI как параметр
  • сделать отображение первых 20 пользователей в модуле webapp
  • добавить в таблицу users уникальный индекс на email и вставлять в базу только новых пользователей. Результат импорта: пользователи, уже присутствующие в базе (POSTGRES: INSERT ON CONFLICT)

Optional

  • сделать сохранение пользователей чанками в несколько потоков (по мере чтения xml). Результат импорта: email пользователей, уже присутствующие в базе и диапазоны (начальный-конечный email) в чанке, если обработка чанка закончилась с ошибкой (InterruptedException / ExecutionException) + причина отказа для пользователя/диапазона.

  • дополнительный материал:

Замечания:

  • 1: при вставке вам помогут JDBI аннотации @BindBean и @BatchChunkSize
  • 2: чтобы при Batch вставке не нагружать базу вызовами nextval можно id генерить самостоятельно (используя ALTER SEQUENCE).
  • 3: без @GetGeneratedKeys результат int[] в insertBatch возвращается с тем же размером, что и List<User>. Значение 0 в возвращаемом массиве означает, что запись не вставилась.