1

Продолжение поста «Java Simple Server для микросервисов?»1

Серия Java Simple Server

Продолжим собирать критику.

Погнали)


После прочтения комментариев к прошлому посту (особенно от @Deadwire, @MJcom и @user5097930) внес ряд изменений в библиотеку.

Коротко:

  1. Аннотации. Да они появились (аж целых две)

  2. Логирование. Пока не везде, но уже имеется.

  3. Автостартер сервера.

Есть два варианта запуска библиотеки:

  1. С аннотациями

  2. Без аннотаций

С аннотациями

Без наследования

С наследованием

Итого надо запомнить, что:

  1. Метод или класс, который запускает сервер, должен быть аннотирован @InitWebServer.

  2. @InitWebServer принимает два параметра: port и threads. По умолчанию port равен 8080, а threads равен 1.

  3. Метод, который реализует логику конечной точки, должен быть аннотирован @Endpoint.

  4. @Endpoint принимает четыре параметра: path, httpMethod, statusCode и filterContentLength. По умолчанию httpMethod равен HttpMethod.GET, statusCode равен 200, а filterContentLength равен -1.

Без аннотаций

Запуск без аннотаций больше похож на старый подход (тем не менее старая реализация помечена как устаревшая в первую очередь из-за изменений в классе Server. Теперь используется класс ServerNext).

Ничего умнее для названия класса ServerNext в голову не пришло.

Кто хочет - может кинуть в меня тапком. Для этого даже есть канал в дискорде))

Кидать в ZooMMaX`а

https://github.com/ZooMMaX/SimpleServer/wiki/ru

https://github.com/ZooMMaX/SimpleServer

Лига программистов

2.1K поста11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

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

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

1
Автор поста оценил этот комментарий

Ах, да, это мои создались. Без гитигнора в блоке commit куча файлов висит.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Можешь создать .gitignore. Я не обижусь)
0
Автор поста оценил этот комментарий

@ZooMMaX, а .gitignore где? Я скачал либу, а она мне твои конфиги идеи подсовывает(

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Короче добавлю🤣
0
Автор поста оценил этот комментарий

@ZooMMaX, а .gitignore где? Я скачал либу, а она мне твои конфиги идеи подсовывает(

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Откуда, если в репу я их не пушил?
показать ответы
1
Автор поста оценил этот комментарий

А если ты еще заставишь свою программку отправлять веб-запросы, а не только их принимать, то, возможно, будет неплохая тулза для тестирования.

То есть прям настроить - отправь запрос, отправь второй запрос, подожди 1 минуту и отправь третий запрос.

Или - отправь 100к запросов на указанные ендпойнты (и перечисление ендпойнтов и тела запросов к ним)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Подумаю над этим)
показать ответы
0
Автор поста оценил этот комментарий

Да, можно для компиляции. Но на этом свой ломбок не напишешь))

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Ну ломбок так-то не маленький проект)
А для генерации трех - четырех видов классов можно было бы заюзать, но мне это кажется излишним.
показать ответы
0
Автор поста оценил этот комментарий

Понял о чём ты. Есть же проверенное решение, понятное если не всем, то многим:

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Ну и у меня можно схожим образом.
SimpleServer.start() подробнее в javadoc))
0
Автор поста оценил этот комментарий
Не понял вопроса, статика же всегда отрабатывает, не обязательно наследоваться.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Иллюстрация к комментарию
Иллюстрация к комментарию
0
Автор поста оценил этот комментарий
Не понял вопроса, статика же всегда отрабатывает, не обязательно наследоваться.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Иллюстрация к комментарию
Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий

Попробуй копнуть в эту сторону

@SupportedAnnotationTypes("my.annotation.class.MyAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_17)
public class MyProcessor extends AbstractProcessor {

@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
}

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : roundEnv.getElementsAnnotatedWith(MyAnnotation.class)) {

//your code

}
return true;
}

}

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Во, ща с пк посмотрел комментарий. Ночью начал рассматривать, но в качестве процессора при компиляции для генерации классов)

показать ответы
0
Автор поста оценил этот комментарий

Попробуй копнуть в эту сторону

@SupportedAnnotationTypes("my.annotation.class.MyAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_17)
public class MyProcessor extends AbstractProcessor {

@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
}

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : roundEnv.getElementsAnnotatedWith(MyAnnotation.class)) {

//your code

}
return true;
}

}

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Спасибо, гляну)
0
Автор поста оценил этот комментарий

Тогда у тебя не должно быть необходимости наследоваться от SimpleServer

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
А как тогда отработает static блок?)
показать ответы
0
Автор поста оценил этот комментарий

Понятно, почему тебе нужно наследование от SimpleServer.


Не готов сказать, что это будет рабочим решением, но может быть вытягивать все классы из ClassLoader'а? И их перебирать, проверяя на наличие аннотации?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Иллюстрация к комментарию
0
Автор поста оценил этот комментарий

Понятно, почему тебе нужно наследование от SimpleServer.


Не готов сказать, что это будет рабочим решением, но может быть вытягивать все классы из ClassLoader'а? И их перебирать, проверяя на наличие аннотации?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Я не особо вчитывался в реализацию либы Reflections, но она вроде именно это и делает)
показать ответы
0
Автор поста оценил этот комментарий

сам класс унаследовать от SimpleServer

Не очень удачно. Как ты обрабатываешь аннотацию?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Вот так.
Иллюстрация к комментарию
Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

@InitWebServer принимает два параметра: port и threads. По умолчанию port равен 8080, а threads равен 1.

Вот это уже нравится больше. Еще сделай так, чтобы аннотацию можно было накинуть на класс, потому что метод main уж совсем никакого отношения к веб-серверу не имеет.

И вопрос - а сервер живет до тех пор, пока работает метод, имеющий аннотацию @InitWebServer? Если да, то это логично, это ожидаемое поведение, и это неплохо сделано. А если метод отработал (сейчас, конечно же, говорим не про метод main), а вызванный им сервер еще живет - это странновато.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А если метод отработал (сейчас, конечно же, говорим не про метод main), а вызванный им сервер еще живет - это странновато.

Во блин... Я забыл сделать метод остановки сервера🤣

1
Автор поста оценил этот комментарий

@InitWebServer принимает два параметра: port и threads. По умолчанию port равен 8080, а threads равен 1.

Вот это уже нравится больше. Еще сделай так, чтобы аннотацию можно было накинуть на класс, потому что метод main уж совсем никакого отношения к веб-серверу не имеет.

И вопрос - а сервер живет до тех пор, пока работает метод, имеющий аннотацию @InitWebServer? Если да, то это логично, это ожидаемое поведение, и это неплохо сделано. А если метод отработал (сейчас, конечно же, говорим не про метод main), а вызванный им сервер еще живет - это странновато.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Аннотация @InitWebServer можно кинуть на класс, а сам класс унаследовать от SimpleServer. Таким образом при вызове дочернего класса произойдет создание синглтона с HttpServer и запуском самого сервера.
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества