Pull to refresh
30
Karma
0
Rating
Григорий Кислин @gkislin

Автор онлайн проектов и стажировок: javaops.ru

  • Followers 132
  • Following 9

Рекомендации по реализации тестового задания (и не только): Java проект с REST API

Programming *Java *Studying in IT IT career
Tutorial

Эти рекомендации - адаптированный под публикацию результат 5-летних проверок выпускных работ участников нашей стажировки "Enterprise Java-разработчик". Часть из них относится только к выполнению тестового задания при устройстве на работу: Java-приложение с REST API. Часть - к разработке на Java. И часть - к разработке любых приложений. Надеюсь, что каждый найдет что-то полезное. Буду рад обсуждению спорных тем в комментариях.

Читать далее
Total votes 9: ↑7 and ↓2 +5
Views 5.1K
Comments 18

Spring и JDK 8: Вы все еще используете @Param и name/value в Spring MVC аннотациях? Тогда статья для Вас

Programming *Java *Studying in IT
Tutorial


Здравствуй, Хаброчитатель!


Разрабатывая учебный проект по Spring Boot 2 решил поэкспериментировать с @Param в запросах Spring Data JPA, а точнее c их отсутствием:


@Transactional(readOnly = true)
public interface UserRepository extends JpaRepository<User, Integer> {

   @Query("SELECT u FROM User u WHERE LOWER(u.email) = LOWER(:email)")
   Optional<User> findByEmailIgnoreCase(@Param("email") String email);

   List<User> findByLastNameContainingIgnoreCase(@Param("lastname") String lastName);
}

(про магию, как работает второй метод есть в старой публикации По следам Spring Pet Clinic).


Убрав @Param можно убедится, что Spring прекрасно работает и без них. Я слышал про параметр в компиляции, который позволяет не дублировать названия в аннотациях, но я ничего не специального не делал, поэтому решил покопать поглубже подебажить.


Если Вы еще пользуетесь аннотациями из заголовка статьи, Spring Boot и JDK 8, прошу под кат:


UPDATE: аннотации @PathVariable и @RequestParam все еще часто нужны, чтобы приложение работало корректно. Но их атрибуты value/name уже не обязательны: соответствие ищется по именам переменных.

Читать дальше →
Total votes 22: ↑19 and ↓3 +16
Views 16K
Comments 7

Новое в Spring 5. Миграция проекта на Spring 5

Programming *Java *IT career
Tutorial
Здравствуйте! Продолжаю серию миграций на новые версии фреймворков.
В прошлый раз это был JUnit 5 за 10 мин., в этот раз будет Spring 5.

Когда говорят о новом в Spring 5, в основном начинают говорить про реактивный стек, опуская достаточно много того нового, что в нем появилось помимо него. Реактивных драйверов к базам данных совсем немного, поэтому мой видеообзор про остальные важные обновления, надеюсь, будет актуально для большинства пользователей Spring. Кроме того, вместе со Spring 5.x обновляются и все его зависимости: spring-data 2.x, spring-security 5.x. В январе этого года наш учебный проект Spring 5/JPA Enterprise (Topjava) мигрировал со Spring 4.3.x на Spring 5. Процесс прошел достаточно легко и в конце небольшого видео на 10 минут я также приведу все изменения в коде проекта.


Читать дальше →
Total votes 13: ↑10 and ↓3 +7
Views 12K
Comments 0

Миграция на JUnit 5 за 10 мин. Измерение времени тестов с помощью Extensions

IT systems testing *Programming *Java *Web services testing *IT career
Tutorial
Здравствуйте!

На последней стажировке Spring 5/JPA Enterprise (Topjava) наш учебный проект мигрировал с JUnit 4 на JUnit 5.2. Основной процесс миграции достаточно прямолинеен, но есть некоторые нюансы, которые требуют ручного вмешательства. Хочу кратко рассказать про них и создании JUnit 5 Extensions для измерения времени тестов в 10 минутном видео.


Код расширения для измерения времени тестов
import org.junit.jupiter.api.extension.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StopWatch;

public class TimingExtension implements BeforeTestExecutionCallback, AfterTestExecutionCallback, BeforeAllCallback, AfterAllCallback {

    private static final Logger log = LoggerFactory.getLogger("result");

    private StopWatch stopWatch;

    @Override
    public void beforeAll(ExtensionContext ctx) {
        stopWatch = new StopWatch("Execution time of " + ctx.getRequiredTestClass().getSimpleName());
    }

    @Override
    public void beforeTestExecution(ExtensionContext ctx) {
        log.info("Start stopWatch");
        stopWatch.start(ctx.getDisplayName());
    }

    @Override
    public void afterTestExecution(ExtensionContext ctx) {
        stopWatch.stop();
        log.info("stop stopWatch");
    }

    @Override
    public void afterAll(ExtensionContext ctx) {
        log.info('\n' + stopWatch.prettyPrint() + '\n');
    }
}


Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 4K
Comments 0

Подборка ресурсов для соискателя на вакансию программист

IT career
Tutorial



Занимаясь с 2013 г. обучением Java и трудоустройством выпускников, я накопил достаточно большую коллекцию ссылок на темы составления резюме, онлайн тестов, подготовки к собеседованию и прохождения интервью, поиска работы и советов новичкам. Часть подходит всем кандидатам, часть (по подготовке) специфична для Java. Предлагаю Вашему вниманию эту подборку:

Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 17K
Comments 3

Java XML API: выбираем правильно. StAX: работаем с удовольствием

Programming *Java *XML *API *
Tutorial
Здравствуйте!
Несмотря на снижение популярности формата XML с начала 2000х, он прочно занял свои ниши. Я сталкивался с обработкой XML ~ в 60% проектов и посвятил ей занятие своей стажировки Masterjava. Наиболее частые его применения: XHTML, SOAP, различные конфигурации (например Tomcat, SoapUI, IntelliJ IDEA, Spring XML конфигурация), импорт-экспорт данных.

В Java есть несколько API для работы с XML и для разработчика важно понимать, какое из API требуется выбрать в каждой конкретной ситуации. В этой статье я кратко перечислю все Java XML API, их назначение и примеры использования, и подробнее остановлюсь на работе с достаточно редкой, но в ряде случаев единственно верной технологией StAX. Предполагается что с элементами XML вы уже знакомы.
Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Views 47K
Comments 8

Этапы развития проекта обучения Java Online Projects: как это было, взгляд изнутри

IT career


Здравствуйте! Меня зовут Григорий Кислин, автор и ведущий учебных проектов и стажировок Java. Хотел рассказать с технической точки зрения, как проект жил и развивался. На каждом этапе приходилось выбирть только самые необходимые для текущей работы решения, которые реализовывались по принципу KISS, или, русский аналог ДУП: Дешево, Удобно и Практично.
Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Views 8.7K
Comments 7

Интегрируем мессенджеры (на примере Slack): GitHub, RSS (в частности Java), вакансии под ваш запрос

Development Management *Project management *Community management *IT career


Привет, Хабр! В последнее время набирают популярность команды мессанждеров по интересам. Удобный интерфейс, разделение общения по каналом, общение в личке позволяет в них комфортно общаться большому (несколько сотен, а возможно и тысяч) человек. Интеграция с другими приложениями делает этот инструмент общения еще более полезным (список приложений для Slack). Приведу несколько примеров интеграций, которые используются в моем учебном проекте Java Enterprise (Topjava):
Читать дальше →
Total votes 17: ↑11 and ↓6 +5
Views 6.4K
Comments 9

Из юниоров в разработчики: получаем первую работу

IT career
Tutorial


Здравствуйте! Коротко о себе: программирую с 1989 г., с 2005 года в Java, с 2013 года работаю Java-тренером (до января этого года совмещал с основной работой Java-разработчика). Достаточно много моих выпускников трудоустроились, и я хочу поделится своими соображениями, как получить работу Java-разработчика (и не только Java).

От изучения Java до получения оффера работы — большое расстояние


Требования к кандидатам на вакансию Java разработчика достаточно высоки, см. пример тестового задания на джуниора от одного из аутсорсеров РБ. Конечно есть позиции и с меньшими требованиям, но их не так много и, по статистике на Украине (dou работает через прокси, в России не нашел), соотношение Отклики/Вакансии на такие позиции: от 20 до 50.

Для вакансий с опытом работы (которых значительно больше) получается замкнутый круг: без опыта не получить работы, а без работы не получить опыта. На вопрос «Кто виноват?» ответ очевиден — компании, которые не хотят вкладывать время и деньги в обучение, а хотят получить уже готового специалиста. Остается главный вопрос:

Что делать?


Читать дальше →
Total votes 19: ↑12 and ↓7 +5
Views 65K
Comments 22

Spring/Jackson + @JsonView: фильтруем JSON

Website development *Java *
Tutorial

Здравствуйте!

Недавно в своем учебном Spring проекте Java Enterprise (Topjava) столкнулся с задачей каcтомизации сериализации объекта User в JSON в зависимости от контроллера: для REST API контроллера нужно было возвращать хешированный пароль (поле user.password), а для контроллера отображения на UI- нет. Можно решить задачу в «лоб», сделав нестолько TO (Data Transfer Object), но в Spring 4.2+/Jackson 2.6 появилась возможность использовать Jackson’s Serialization Views. Однако с статье есть подвох, и для невнимательных читателей вьюхи работают не так, как он ожидает.

В результате мне пришлось немного покопаться в реализации Jackson, чтобы понять, как все это работает. Коротко об этом:
under cut
Total votes 19: ↑17 and ↓2 +15
Views 28K
Comments 5

Java: улучшаем качество кода (предусловия, IDEA QAPlug, интерграция GitHub c Codacy)

Website development *Programming *Java *Perfect code *GitHub
Tutorial
Здравствуйте!
Продолжаю серию публикаций по учебному Java Enterprise проекту Topjava (Maven/Spring/Security/JPA(Hibernate)/Rest(Jackson)/ Bootstrap(CSS)/ jQuery+plugin).

Небольшая тема четвертого занятия: улучшаем качество кода


Полезные ссылки:

  1. Контрактное программирование, Программирование по контракту
  2. Comparison Preconditions in Java
  3. QAPlug vs FindBugs
  4. QAPlug tutorials
  5. Codacy Home
Читать дальше →
Total votes 6: ↑3 and ↓3 0
Views 5.8K
Comments 11

Эволюция Java на примере чтения строк из файла

Website development *Programming *Java *
Tutorial
Приведу небольшой и интересный, на мой взгляд, пример, как изменилась жизнь простого крестьянина Java разработчика, на примере задачи чтения и печати строк из файла.



Многие из нас помнят

'до Java 7' мучения:


        BufferedReader reader = null;
        try {
            reader = new BufferedReader(
                        new InputStreamReader(
                            new FileInputStream(FILE_NAME), Charset.forName("UTF-8")));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // log error
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    // log warning
                }
            }
        }

Читать дальше →
Total votes 34: ↑18 and ↓16 +2
Views 122K
Comments 17

Деплой Java Spring приложения в PaaS-платформу Heroku за 14 минут

Website development *Programming *Java *
Tutorial


Здравствуйте!
Продолжаю серию публикаций по проекту
Maven/Spring/Security/JPA(Hibernate)/Rest(Jackson)/ Bootstrap(CSS)/ jQuery+plugins
(исходный код на GitHub).

Предыдущие публикации:

Заключительная часть проекта: деплой в облачную PaaS-платформу Heroku

Читать дальше →
Total votes 10: ↑8 and ↓2 +6
Views 22K
Comments 0

Spring Security 4 + CSRF (добавление в Spring проект защиты от межсайтовой подделки запроса)

Information Security *Website development *Programming *Java *
Tutorial


Здравствуйте!
Современное веб приложение считается уязвимым, если в нем отсутствует защита от Межсайтовой подделки запроса (CSRF).
В Spring Security 4.x она включена по умолчанию, поэтому при миграции с Spring Security 3.x на 4.x ее надо либо отключить
<http>
	...
	<csrf disabled="true"/>
</http>
либо, правильнее и зачетнее, добавить в проект.

Собственно, сделал это в 10-минутном видео:

Читать дальше →
Total votes 14: ↑10 and ↓4 +6
Views 32K
Comments 3

Тестируем Spring Rest контроллеры: проще, короче, надежнее. Spring Security Test + JSON Matcher

Website development *Programming *Java *
Tutorial


Здравствуйте!
Собственный JSON Matcher, использование Spring Security Test, недавно вошедший в Spring Security 4.0, и отказ от транзакций при тестировании сервисов позволяют сделать тесты проще и надежнее.

Я использовал данный подход при создании приложения на своем курсе Topjava (Maven/ Spring/ Security/ JPA(Hibernate)/ Rest(Jackson)/ Bootstrap(CSS)/ jQuery + plugins).
Данная статья не является еще одним учебником по тестированию Spring REST контроллеров и предполагает что вы уже с ним знакомы.

Про выгоды отказа от транзакций я уже писал в предыдущей публикации По следам Spring Pet Clinic. Maven/ Spring Context/ Spring Test/ Spring ORM/ Spring Data JPA. К перечисленным недостаткам использования @Transaction еще можно добавить невозможность посмотреть реальные запросы при выполнении метода сервиса к базе (например при включенном hibernate.use_sql_comments)

Здесь я напишу как проще, короче, надежнее тестировать Spring REST контроллеры.
Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views 30K
Comments 1

По следам Spring Pet Clinic. Maven/ Spring Context/ Spring Test/ Spring ORM/ Spring Data JPA

Website development *Programming *Java *
Tutorial

Здравствуйте!
Spring MVC, согласно обзору инструментов и технологий Java за 2014 г. от RevbelLabs, является самым популярным веб фреймворком.
Далее тот же обзор называет лидера ORM — Hibernate и лидера веб-контейнеров — Apache Tomcat. Добавим сюда самую используемую java script библиотеку jQuery, самый популярный css фреймворк Bootstrap, до сих пор самую популярную (несморя на наступление Gradle) инструмент сборки Maven, абсолютный лидер среди тестовый фреймворков JUnit и получим пример приложения на Spring от его создателей:
Spring Pet Clinic (демо приложение).
Кроме перечисленного, в этот достаточно несложный по функциональности проект влючены также Spring-Jdbc, Spring-ORM,
Spring Data JPA,
Hibernate Validator,
SLF4J,
Json Jackson,
JSP,
JSTL,
WebJars,
Dandelion DataTables,
HSQLDB,
Hamcrest,
Mockito и десятки других зависимостей.
Читать дальше →
Total votes 19: ↑15 and ↓4 +11
Views 44K
Comments 9

Путь к Java Junior Developer

Java *
Sandbox


Здравствуйте.
Меня зовут Кислин Григорий. В начале ноября в Санкт-Петербурге закончился первый обучающий семинар «Java. Базовый курс», сейчас переименнованый в «Java. Junior Developer. Интенсив». Хочу поделиться с Вами полученным при его проведении опытом на тему обучения Java а также своим опытом трудоустройства на позицию Java разработчика.

Читать дальше →
Total votes 34: ↑15 and ↓19 -4
Views 488K
Comments 14

Поддержка транзакций, тестового окружения и другие удобные надстройки над commons-dbutils

Website development *Programming *Java *

Поддержка транзакций, тестового окружения и другие удобные надстройки над commons-dbutils.


"/>
  Если обращение к RDBMS вашего проекта ведется не через ORM или Spring JdbcTemplate, то работу через голый JDBC может сильно скрасить commons-dbutils.
Особенно если его надстроить транзакциями, работой с разными окружениями, авто-открытием/закрытием ресурсов, запрсами read-only, обработкой SqlException, возвратом pk при вставке и т.д.
Т.е, например, чтобы можно было бы сделать так:
int userId = Sql.queryForValue("SELECT ID FROM OU.USERS WHERE LAST_NAME=?", "IVANOV");
Sql.update("DELETE FROM OU.USERS WHERE FIRST_NAME=? AND LAST_NAME=?", fname, lname);
List<User> list = Sql.query("SELECT FROM OU.USERS", USER_LIST_HANDLER);
int newId = Sql.insert("INSERT INTO OU.USERS VALUES (?,?)", fname, lname);

И этот код работал бы внутри транзакции, через Application Server Connction pool и в JUnit без изменений и mock-ов.
За чуть меньше года моей работы с commons-dbutils он оброс различными классами и утильными методами, о которых и хочу здесь рассказать.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 5.1K
Comments 2

Архитектура базы данных: унификация (на примере ERP)

PostgreSQL *SQL *

Есть концепции работы с базой, основанные на ORM, CodeFirst со своими преимуществами и недостатками. Предлагаемая здесь унификация базы основана в первую очередь на подходе Database First.

Схема базы данных приложений со сложной доменной моделью (к которым относятся системы ERP) обычно состоит из
нескольких сотен таблиц.
Поэтому на начальном этапе проектирования базы для избежания многократных дублирований и разбухания схемы важно
определиться с несколькими базовыми таблицами для хранения общих свойств базовых сущностей приложения
и все остальные таблицы уже проектировать как вспомогательные или дополнения основных таблиц.
Читать дальше →
Total votes 14: ↑7 and ↓7 0
Views 13K
Comments 21

Переход с Java на Scala (Clojure, Haskell, Erlang ..) как повышение абстракции программирования

Java *Scala *Functional Programming *
А что такого можно написать на Scala, чего нельзя на Java?
(из разговора с одним моим знакомым другом, человеком и программистом)
The best reason to learn a new programming language is to learn to think differently.
Chad Fowler

Хочу рассказать не о простоте конструкций Scala по сравнению с Java и не о том, что в 1 строчку Scala я могу уместить 20 строк Java. А наоборот, копнуть поглубже, уронить устои ООП и посмотреть на реакцию благородной публики.
Читать дальше →
Total votes 52: ↑29 and ↓23 +6
Views 32K
Comments 83
1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity