From 9611a96de864783106ae330c7ac8277cdbd73866 Mon Sep 17 00:00:00 2001 From: "life@u-rise.com" Date: Mon, 4 Jul 2016 13:09:25 +0300 Subject: [PATCH 1/6] Add Matrix entrance task --- .gitignore | 8 ++ README.md | 84 ++++++++++++++----- pom.xml | 44 ++++++++++ src/main/java/ru/javaops/masterjava/Main.java | 14 ++++ .../javaops/masterjava/matrix/MainMatrix.java | 23 +++++ .../javaops/masterjava/matrix/MatrixUtil.java | 24 ++++++ 6 files changed, 176 insertions(+), 21 deletions(-) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/ru/javaops/masterjava/Main.java create mode 100644 src/main/java/ru/javaops/masterjava/matrix/MainMatrix.java create mode 100644 src/main/java/ru/javaops/masterjava/matrix/MatrixUtil.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..6ca05c4a5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.idea +out +target +*.iml +log + + + diff --git a/README.md b/README.md index ed139bed8..17463736d 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,65 @@ -#### Написание с нуля полнофункционального многомодульного Maven проекта: -веб приложения (Tomcat, JSP, jQuery), -многопоточного почтового сервиса (JavaMail, java.util.concurrent.*) и вспомогательных модулей связанных по Веб и REST сервисам (SOAP, JAX-WS, Axis, JAX-RS) -c сохранением данных в RMDBS и динамическим конфигурирование модулей по JMX. +# Многопоточность. Веб сервисы. +### _Разработка полнофункционального многомодульного Maven проекта_ +- веб приложение (Tomcat, JSP, jQuery), +- многопоточный почтовый сервиса (JavaMail, java.util.concurrent.*) +- вспомогательные модули, связанные по веб-сервисам (SOAP, JAX-WS) и по REST (JAX-RS) +- сохранение данных в RMDBS (H2) и динамическое конфигурирование модулей по JMX. -## Сервис-ориентированная архитектура, Микросервисы +## Необходимое на курсе ПО +- JDK8 +- Git +- IntelliJ IDEA + +> Выбирать Ultimate, 30 days trial (работа с JavaScript, Tomcat, JSP). Учебный ключ к Ultimate выдается на первом занятии. + +## Многопоточность +![Concurrent vs Parallel](https://joearms.github.io/images/con_and_par.jpg) +- Java Memory Model +- Синхронизация потоков +- Обзор java.util.concurrent.* +- Использование ThreadLocal переменных + +#### Основы, доп. материалы +- Intuit, Потоки выполнения. Синхронизация +- Алексей Владыкин, Основы многопоточность в Java +- Виталий Чибриков, Java. Многопоточность +- Computer Science Center, курс Параллельное программирование +- Юрий Ткач, курс Advanced Java - Concurrency +- Головач, курс Java Multithreading + +--- +# Вступительное задание: +Вычекать этот проект: +```git clone https://github.com/JavaOPs/masterjava.git``` + +Реализовать класс `MainMatrix`, позволяющий многопоточно перемножать квадратные матрицы N*N. +- Количество дочерних потоков ограничено M (Mоптимизации +- Сделать несколько вариантов решения: + - Объязательно: используя только механизмы синхронизации Java 1.4 + - Опционально: без ограничений + +----- +# Программа курса +> **возможны изменения, окончательная программа будет перед стартом курса** + +### Concurrent and Parallel Programming +- Thread safety. Java Memory Model/ JSR 133. Happens-before. +- Публикация объектов. Использование ThreadLocal переменных +- Initialization on demand holder / Double-checked locking +- Обзор java.util.concurrent.* + +### Сервис-ориентированная архитектура, Микросервисы - JMS, альтернативы - Варианты разворачивания сервисов. Работа с базой. Связывание сервисов. -## Maven. Многомодульный Maven проект +### Maven. Многомодульный Maven проект - Build Lifecycle - Dependency Mechanism - Зависимости, профили, написание плагина - The Reactor. Snapshots -## Создание/тестирование веб-приложения. +### Создание/тестирование веб-приложения. - Сборка, запуск, локальный и удаленный debug проекта, способы деплоя в Tomcat - tomcat7-maven-plugin @@ -23,20 +69,20 @@ c сохранением данных в RMDBS и динамическим ко - Создание API и реализации веб-сервиса MailService. - Деплой и тестирование через SoapUI. -## Доработка веб-сервиса. Кастомизация WSDL. +### Доработка веб-сервиса. Кастомизация WSDL. - Работа с JAXB. - Передача по SOAP Exception - Включение wsdl в сервис для публикации. - Генерация java кода по WSDL -## Реализация клиент веб-сервиса. +### Реализация клиент веб-сервиса. - Публикация веб сервиса из main(). Дабавление wsdl - Выделение из wsdl общей части - Создание клиента почтового сервиса. - Тестирование с помощью JUnit 4 - Интеграционное тестирование, maven-failsafe-plugin -## JAX-WS Handlers +### JAX-WS Handlers - Logical/protocol handlers. - Логирование SOAP на стороне клиента. - Логирование и статистика трафика опубликованного веб-сервиса. @@ -44,38 +90,34 @@ c сохранением данных в RMDBS и динамическим ко - 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 веб сервис. +### REST веб сервис. - JAX-RS. Интеграция с Jersey - Поддержка Json. Jackson -## Асинхронность. +### Асинхронность. - @OneWay vs Java Execution framework - Добавление в клиенте асинхронных вызовов. - Асинхронные сервлеты 3.x в Tomcat -## Динамическое конфигурирование. JMX +### Динамическое конфигурирование. JMX - Maven Groovy cкрптинг. groovy-maven-plugin - Настройка Tomcat на удаленное администрирование по JMX -## Отправка email в многопоточном приложении -- Initialization on demand holder / Double-checked locking -- java.util.concurrent.*: Executors , Synchronizers, Concurrent Collections, Lock - -## Проблема MemoryLeak. Поиск утечки памяти. +### Проблема MemoryLeak. Поиск утечки памяти. diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..39e811e08 --- /dev/null +++ b/pom.xml @@ -0,0 +1,44 @@ + + 4.0.0 + + ru.javaops + masterjava + jar + + 1.0-SNAPSHOT + + Master Java + https://github.com/JavaOPs/masterjava + + + 1.8 + UTF-8 + UTF-8 + + + + masterjava + install + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + + + + + + + + + + + + + + diff --git a/src/main/java/ru/javaops/masterjava/Main.java b/src/main/java/ru/javaops/masterjava/Main.java new file mode 100644 index 000000000..a849258c4 --- /dev/null +++ b/src/main/java/ru/javaops/masterjava/Main.java @@ -0,0 +1,14 @@ +package ru.javaops.masterjava; + +/** + * User: gkislin + * Date: 05.08.2015 + * + * @link http://caloriesmng.herokuapp.com/ + * @link https://github.com/JavaOPs/topjava + */ +public class Main { + public static void main(String[] args) { + System.out.format("Hello MasterJava!"); + } +} diff --git a/src/main/java/ru/javaops/masterjava/matrix/MainMatrix.java b/src/main/java/ru/javaops/masterjava/matrix/MainMatrix.java new file mode 100644 index 000000000..28f28dc9f --- /dev/null +++ b/src/main/java/ru/javaops/masterjava/matrix/MainMatrix.java @@ -0,0 +1,23 @@ +package ru.javaops.masterjava.matrix; + +/** + * gkislin + * 03.07.2016 + */ +public class MainMatrix { + // Multiplex matrix + private static final int MATRIX_SIZE = 1000; + private static final int THREAD_NUMBER = 10; + + public static void main(String[] args) { + final int[][] matrixA = new int[MATRIX_SIZE][MATRIX_SIZE]; + final int[][] matrixB = new int[MATRIX_SIZE][MATRIX_SIZE]; + + long start = System.currentTimeMillis(); + final int[][] matrixC = MatrixUtil.singleThreadMultiply(matrixA, matrixB); + System.out.println("Single thread multiplication time, sec: " + (System.currentTimeMillis() - start)/1000.); + + // TODO implement parallel multiplication matrixA*matrixB + // TODO compare wih matrixC; + } +} diff --git a/src/main/java/ru/javaops/masterjava/matrix/MatrixUtil.java b/src/main/java/ru/javaops/masterjava/matrix/MatrixUtil.java new file mode 100644 index 000000000..9e01a338b --- /dev/null +++ b/src/main/java/ru/javaops/masterjava/matrix/MatrixUtil.java @@ -0,0 +1,24 @@ +package ru.javaops.masterjava.matrix; + +/** + * gkislin + * 03.07.2016 + */ +public class MatrixUtil { + + public static int[][] singleThreadMultiply(int[][] matrixA, int[][] matrixB) { + final int matrixSize = matrixA.length; + final int[][] matrixC = new int[matrixSize][matrixSize]; + + for (int i = 0; i < matrixSize; i++) { + for (int j = 0; j < matrixSize; j++) { + int sum = 0; + for (int k = 0; k < matrixSize; k++) { + sum += matrixA[i][k] * matrixB[k][j]; + } + matrixC[i][j] = sum; + } + } + return matrixC; + } +} From ebabca1a6c3ecca20bf8973d7e1f21f12e54fbbb Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Wed, 13 Jul 2016 14:24:42 +0300 Subject: [PATCH 2/6] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 17463736d..47bca0cc2 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ - вспомогательные модули, связанные по веб-сервисам (SOAP, JAX-WS) и по REST (JAX-RS) - сохранение данных в RMDBS (H2) и динамическое конфигурирование модулей по JMX. +### Требование к участникам +Опыт программирования на Java. Базовые знания Maven. + ## Необходимое на курсе ПО - JDK8 - Git From c6fe5b4ab87d2d5f611a1d16f3b5234df6c9fc6f Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Wed, 13 Jul 2016 14:35:38 +0300 Subject: [PATCH 3/6] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 47bca0cc2..a5b2a6338 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Многопоточность. Веб сервисы. ### _Разработка полнофункционального многомодульного Maven проекта_ -- веб приложение (Tomcat, JSP, jQuery), -- многопоточный почтовый сервиса (JavaMail, java.util.concurrent.*) -- вспомогательные модули, связанные по веб-сервисам (SOAP, JAX-WS) и по REST (JAX-RS) +- веб приложение (Tomcat, JSP, jQuery) +- многопоточный почтовый сервиса (JavaMail, java.util.concurrent.*) и вспомогательные модули +- связь модулей через веб-сервисы (SOAP, JAX-WS) и по REST (JAX-RS) - сохранение данных в RMDBS (H2) и динамическое конфигурирование модулей по JMX. ### Требование к участникам From 204f744eef3ea3535685678fcda10108abc67a9b Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 15 Jul 2016 18:56:16 +0300 Subject: [PATCH 4/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5b2a6338..5100019e6 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ ### Веб-сервисы - Веб-сервисы. SOAP. Преимущества/недостатки веб-сервисов. Расширения. -- Реализация веб-сервисов в Java. JAX-RPC, JAX-WS, CFX, Axis. Стили WSDL +- Реализация веб-сервисов в Java. JAX-RPC, JAX-WS. Стили WSDL - Создание API и реализации веб-сервиса MailService. - Деплой и тестирование через SoapUI. From eada0e7fb5ed0311922efd765d47040d1fd109e2 Mon Sep 17 00:00:00 2001 From: ilnur Serbaev Date: Tue, 19 Jul 2016 01:47:32 +0600 Subject: [PATCH 5/6] Delete README.md --- README.md | 126 ------------------------------------------------------ 1 file changed, 126 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 5100019e6..000000000 --- a/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# Многопоточность. Веб сервисы. -### _Разработка полнофункционального многомодульного 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 выдается на первом занятии. - -## Многопоточность -![Concurrent vs Parallel](https://joearms.github.io/images/con_and_par.jpg) -- Java Memory Model -- Синхронизация потоков -- Обзор java.util.concurrent.* -- Использование ThreadLocal переменных - -#### Основы, доп. материалы -- Intuit, Потоки выполнения. Синхронизация -- Алексей Владыкин, Основы многопоточность в Java -- Виталий Чибриков, Java. Многопоточность -- Computer Science Center, курс Параллельное программирование -- Юрий Ткач, курс Advanced Java - Concurrency -- Головач, курс Java Multithreading - ---- -# Вступительное задание: -Вычекать этот проект: -```git clone https://github.com/JavaOPs/masterjava.git``` - -Реализовать класс `MainMatrix`, позволяющий многопоточно перемножать квадратные матрицы N*N. -- Количество дочерних потоков ограничено M (Mоптимизации -- Сделать несколько вариантов решения: - - Объязательно: используя только механизмы синхронизации Java 1.4 - - Опционально: без ограничений - ------ -# Программа курса -> **возможны изменения, окончательная программа будет перед стартом курса** - -### Concurrent and Parallel Programming -- Thread safety. Java Memory Model/ JSR 133. Happens-before. -- Публикация объектов. Использование ThreadLocal переменных -- Initialization on demand holder / Double-checked locking -- Обзор java.util.concurrent.* - -### Сервис-ориентированная архитектура, Микросервисы -- 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. Поиск утечки памяти. From 3c487813d7028a27a88c1959acbdfa490afeb250 Mon Sep 17 00:00:00 2001 From: ilnur Serbaev Date: Tue, 19 Jul 2016 01:49:51 +0600 Subject: [PATCH 6/6] Create README.md --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..f72bc705a --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# test task