powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / ServletContextListener.contextInitialized() выполнянется два раза
51 сообщений из 51, показаны все 3 страниц
ServletContextListener.contextInitialized() выполнянется два раза
    #39989421
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Приложение Spring boot. Создал класс реализующий ServletContextListener.

Почему и в режиме Debug и в режиме Run метод contextInitialized(ServletContextEvent sce) выполняется два раза?
При повторном выполнении контекст остается таким же, что и после первого выполнения метода. Это мешает тестированию приложения.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989425
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar
Всем привет!

Приложение Spring boot. Создал класс реализующий ServletContextListener.

Почему и в режиме Debug и в режиме Run метод contextInitialized(ServletContextEvent sce) выполняется два раза?
При повторном выполнении контекст остается таким же, что и после первого выполнения метода. Это мешает тестированию приложения.

Потому что контекст создается два раза, очевидно же?
Как можно без кода, без аннотаций что-то вменяемое ответить?
И вообще зачем спрашивать если можно продебажить?
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989443
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

contextInitialized - выводится дважды в консоле

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ExecutorListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed");
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized");
    }

}
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989445
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложение запускается под Tomcat

автор . ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.2.RELEASE)

2020-08-13 16:51:26.243 INFO 2404 --- [ost-startStop-1] com.example.demo.ServletInitializer : Starting ServletInitializer on A-PC with PID 2404 (C:\Dev\Code\Testing\JMX\InitializrSpringbootProject\target\demo-0.0.1-SNAPSHOT\WEB-INF\classes started by A in C:\Dev\apache-tomcat-8\bin)
2020-08-13 16:51:26.250 INFO 2404 --- [ost-startStop-1] com.example.demo.ServletInitializer : No active profile set, falling back to default profiles: default
2020-08-13 16:51:27.405 INFO 2404 --- [ost-startStop-1] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1042 ms
2020-08-13 16:51:28.080 INFO 2404 --- [ost-startStop-1] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-08-13 16:51:28.363 INFO 2404 --- [ost-startStop-1] com.example.demo.ServletInitializer : Started ServletInitializer in 3.012 seconds (JVM running for 6.303)
13-Aug-2020 16:51:28.406 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of deployment descriptor [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml] has finished in [5В 236] ms
13-Aug-2020 16:51:28.408 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Установка веб приложения в папку [C:\Dev\apache-tomcat-8\webapps\docs]
contextInitialized
13-Aug-2020 16:51:28.449 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Dev\apache-tomcat-8\webapps\docs] has finished in [41] ms
13-Aug-2020 16:51:28.449 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Установка веб приложения в папку [C:\Dev\apache-tomcat-8\webapps\examples]
13-Aug-2020 16:51:28.734 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Dev\apache-tomcat-8\webapps\examples] has finished in [285] ms
13-Aug-2020 16:51:28.734 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Установка веб приложения в папку [C:\Dev\apache-tomcat-8\webapps\host-manager]
13-Aug-2020 16:51:28.764 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Dev\apache-tomcat-8\webapps\host-manager] has finished in [30] ms
13-Aug-2020 16:51:28.765 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Установка веб приложения в папку [C:\Dev\apache-tomcat-8\webapps\manager]
13-Aug-2020 16:51:28.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Dev\apache-tomcat-8\webapps\manager] has finished in [35] ms
13-Aug-2020 16:51:28.804 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8081"]
13-Aug-2020 16:51:28.820 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 5719 ms
2020-08-13 16:51:29.972 INFO 2404 --- [nio-8081-exec-9] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
contextDestroyed
13-Aug-2020 16:51:30.485 INFO [http-nio-8081-exec-9] org.apache.catalina.startup.HostConfig.undeploy Undeploying context [/demo]
13-Aug-2020 16:51:30.496 INFO [http-nio-8081-exec-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml]
13-Aug-2020 16:51:31.773 INFO [http-nio-8081-exec-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.2.RELEASE)

2020-08-13 16:51:32.666 INFO 2404 --- [nio-8081-exec-1] com.example.demo.ServletInitializer : Starting ServletInitializer on A-PC with PID 2404 (C:\Dev\Code\Testing\JMX\InitializrSpringbootProject\target\demo-0.0.1-SNAPSHOT\WEB-INF\classes started by A in C:\Dev\apache-tomcat-8\bin)
2020-08-13 16:51:32.670 INFO 2404 --- [nio-8081-exec-1] com.example.demo.ServletInitializer : No active profile set, falling back to default profiles: default
2020-08-13 16:51:33.465 INFO 2404 --- [nio-8081-exec-1] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 733 ms
2020-08-13 16:51:34.031 INFO 2404 --- [nio-8081-exec-1] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-08-13 16:51:34.240 INFO 2404 --- [nio-8081-exec-1] com.example.demo.ServletInitializer : Started ServletInitializer in 2.204 seconds (JVM running for 12.18)
contextInitialized
13-Aug-2020 16:51:34.254 INFO [http-nio-8081-exec-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of deployment descriptor [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml] has finished in [3В 758] ms
13-Aug-2020 16:51:34.263 INFO [http-nio-8081-exec-4] org.apache.catalina.util.LifecycleBase.start The start() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/demo]] after start() had already been called. The second call will be ignored.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989448
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее приложение запускается через NetBeans, сервер Tomcat
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989479
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В логах два старта SpringBootApplication. Вот и будет все по два раза.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989699
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В логах два старта SpringBootApplication. Вот и будет все по два раза.


Для чего происходит 2-ой запуск?
Как сделать один запуск?
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989709
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это Котяра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
2020-08-13 16:51:28.363 INFO 2404 --- [ost-startStop-1]
 com.example.demo.ServletInitializer :
 Started ServletInitializer in 3.012 seconds (JVM running for 6.303)
13-Aug-2020 16:51:28.406 INFO [localhost-startStop-1]
 org.apache.catalina.startup.HostConfig.deployDescriptor
  Deployment of deployment descriptor
  [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml]
  has finished in [5В 236] ms
...
2020-08-13 16:51:29.972 INFO 2404 --- [nio-8081-exec-9]
 o.s.s.concurrent.ThreadPoolTaskExecutor :
 Shutting down ExecutorService 'applicationTaskExecutor'
  contextDestroyed
13-Aug-2020 16:51:30.485 INFO [http-nio-8081-exec-9]
 org.apache.catalina.startup.HostConfig.undeploy
  Undeploying context [/demo]
13-Aug-2020 16:51:30.496 INFO [http-nio-8081-exec-1]
 org.apache.catalina.startup.HostConfig.deployDescriptor
  Deploying deployment descriptor
  [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml]
это Бутяра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
2020-08-13 16:51:34.240 INFO 2404 --- [nio-8081-exec-1]
 com.example.demo.ServletInitializer :
  Started ServletInitializer in 2.204 seconds (JVM running for 12.18)
   contextInitialized
13-Aug-2020 16:51:34.254 INFO [http-nio-8081-exec-1]
 org.apache.catalina.startup.HostConfig.deployDescriptor
  Deployment of deployment descriptor
  [C:\Dev\apache-tomcat-8\conf\Catalina\localhost\demo.xml]
  has finished in [3В 758] ms
Читайте доки, смотрите скрипты запуска у себя и в примерах.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989910
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringBoot - это вобщем связующий клей для фреймворков. Он сам по себе мало чего делает.
Но он может искусственно поднять Tomcat в качестве веб-контейнера для того чтоб обеспечить
деятельность http-листенеров. Собственно пуск Томката всегда видно в логах. Только детализацию
надо включить.

Мы как-то поднимали голосование по веб-серверам и Томкат как эталонная реализация (и бесплатная)
HTTP - занял у нас первое место по частоте использований.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989926
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79, чем старше ты будешь становиться - тем больше ты будешь искать простых решений сложных зада.

SpringBoot - это сложый стек технологий. Хотя внешняя обёртка (то что называется бут) была создана
специально чтобы облегчить процесс бут-страпа приложений от хеллоу-ворд до ентерпрайза.
Те кто это делали - своего добились. К сожалению комплексность под капотом не ушла а осталась.
И ты можешь очень долго использовать бут но при этом практически будешь не в состоянии пофиксить
его-же внутреннию бутовую ошибку например. Тот факт что ты в восторге от бута - это просто внешнее
эмоциональное состояние какраз от его внешнего дизайна. Не позволяй себе очаровываться. Инженер
должен быть хладнокровным. Как анатом.

Копни глубже. Почитай как и зачем он использует cglib например. Это интересная тема. Хорошо прокачивает
общие знания.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39989984
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79, какой я тебе олдскул? Тебе сорокет? Ну и я недалеко ушел.

Так что нечего тут в молодого играть. Я прекрасно вижу твои трудности
и как ты рассуждаешь. У тебя точка зрения менятеся от работы к работе.

У тебя мудрость настанет тогда, когда перестанешь идеализировать
Spring или "прятаться в домике" бизнес-кодера. Если хочешь расти
в карьере - будешь учить bash, python, groovy, kotlin, scala, и тысячи
диалектов конфигураций теже Докеры. И тот-же SQL учить придется.
Будет задача перформанса. И некому ее решать. Будешь сам решать.
Нет такого девопса который тебе SQL напишет. И нет такого архитектора
который за тебя напишет конфигурации gradle, maven. И никто бинарные
форматы сериализаций за тебя читать не будет. Ты должен уметь глазами
читать hex-codes. Это полезный скил по жизни. Как у самурая - владение
клинком. Так и у разработчика способность читать целые числа хотя-бы
в трех системах счисления. И Linux знать надо чтоб обосновать и выбрать
конфигурацию. Кто за тебя ее выберет? Заказчик что-ли? Он невкурсе?
И амазон облако соптимизировать по биллинку тоже тебе надо.

Видишь сколько всего надо? А ты хочешь отсидеться в кустах.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990009
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
В принципе если ты знаешь историю- то поймешь ,что именно разделение труда и есть основной двигатель прогресса.
Коряво оно сейчас разделяется.
Исторически разделение труда стартовало на относительно простых технологических процессах. Типа "девятнадцать операций для изготовления булавки". Только потом подтянулось разделение труда в инженерной и научной сфере, что позволило создавать неимоверно сложные процессы и технологии, которые уже невозможно уложить в голове отдельно взятого человека.
Программирование, в некотором смысле, шло в обратном направлении: академически простые элементарные операции (машина Тьюринга - примитивна), которые сразу объединены в сложнейшие комплексы.
Современные попытки "индустриализации" программирования - скорее попытки управлять этой сложностью, а не реальное разделение труда. Просто потому, что в "нормальной" индустрии даже простой рабочий неплохо понимает общий процесс: что, как, зачем и почему. А в программировании этого понимания нет до сих - большая и местами дурно пахнущая куча механик и эвристик: "исторически сложилось".
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990038
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar
Точнее приложение запускается через NetBeans, сервер Tomcat
ну там же видно в логе, что оно запускается, деплоится, потом происходит редеплой. Очевидно, что редеплой делает ваша IDE (может явно, а может и не явно за счет обновления содержимого директории), а не бут.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990107
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
mayton
Zzz79, какой я тебе олдскул? Тебе сорокет? Ну и я недалеко ушел.
ты олдскул в плане прогерства)
я то новая водлна - не успел застать конфигрустов слава богу)



Ахахах.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990122
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79

В некоторых конторах собственно ничего и не поменялось- бекэнд разраб в их понимании должен уметь и сервак настроить и порты прокинуть и Тимсити до кучи.
В нормальных конторах,где процесс выстроен правильно такого просто априори быть не может,там дев опс выполняет свои задачи,фронт свои,бек свои.


Во тип! не смог в коте приложение развернуть и поэтому решил что этим кто-то другой должен заниматься
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990181
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
В некоторых конторах ...
В нормальных конторах ...
Хотел понаписать "многабукав", но передумал - потерянное вы поколение. Жизнь ваша не просто скудна - вы даже не пытаетесь понять, насколько вы оскопили сами себя: "Да чё тут думать - прыгать надо".
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990249
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Zzz79
В некоторых конторах ...
В нормальных конторах ...
Хотел понаписать "многабукав", но передумал - потерянное вы поколение. Жизнь ваша не просто скудна - вы даже не пытаетесь понять, насколько вы оскопили сами себя: "Да чё тут думать - прыгать надо".


Чем сильнее специализация, тем развитее экономика.
Так что все норм.

Раньше программисты, перед тем чем программировать паяли себе компьютер. :-)

Понятно, что знать лучше чем не знать.
Но если знаниями постоянно не пользоваться они забываются.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990273
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Чем сильнее специализация, тем развитее экономика
уже специалист.
Ключевое в современной экономике - разделение труда. Специализация - (уже) пройденный этап.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990284
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по моему, современному программисту просто не хватает философии.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990328
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы браться за философию надо бы подтянуть, для начала, общее образование.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990337
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
сейчас на прод стенд выделяют даже в слабонагруженой системе как у нас 16 гиг озу-а
"... кому жемчуг мелок".
Я вот вижу рабочие системы, где виртуальной машине выделено 4-8ГБ. И больше не будет. Вообще или в обозримом будущем.

P.S.
Зарубите уже на своём снобском носу, что не вы, а бизнес решает - сколько денег выделить на ресурсы.
А уж сколько ресурсов вы сможете купить на эти деньги - уже совсем другая история.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990342
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79

Пример с волгой мне напомнил одного товарища,который до сих пор против ломбок,он как только эти анотации видит у его пар из ушей идет- тоже олд скул прогер далеко за 50 .Пытался с ним спорить,что все это тонны гетеров,сетеров и конструкторов и билдеров просто захламляют класс,делают его не читаемым- бесполезно обьяснять "там же все равно будет этот код")


ИМХО lombok не особо нужен.
Как минимум в IDEA и Eclipse можно создавать getter/setter и пр. через автогенерацию.
Вместо lombok можно взять Kotlin. ;-)
У lombok есть сайдэфекты, при работе со Spring [ [spoiler]url=
YouTube Video
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990343
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

У lombok есть сайдэфекты, при работе со Spring
есть смысл тратить час на просмотр или там очередные имбецилы?
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990350
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
тратить час

я так понимаю речь о 40-й минуте и дальше
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990354
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
очередные имбецилы?
ну да, так и есть. Мы берем и вставляем бизнес-логику в POJO (@javax.validation.Valid придумано для лохов видимо), а потом удивляемся чего это оно не работает как ожидается, и при этом виноватым оказывается annotation processor, а про то что это все может и без lombok лететь в тартарары при смене сериализатора/компилятора мы умалчиваем.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990358
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote=Zzz79] [quote=mad_nazgul]
ИМХО lombok не особо нужен.
Как минимум в IDEA и Eclipse можно создавать getter/setter и пр. через автогенерацию.
Вместо lombok можно взять Kotlin. ;-)
У lombok есть сайдэфекты, при работе со Spring [ [spoiler] url=
YouTube Video
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990373
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ломбок - это скотч которым сбоку к проекту что-то "примотали".
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990388
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати предлагаю Джону Смиту вместо ответа на вопрос порассуждать чем POJO объекты отличаются
от всех остальных.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990395
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
mayton
Кстати предлагаю Джону Смиту вместо ответа на вопрос порассуждать чем POJO объекты отличаются
от всех остальных.

первым делом джон бы спросил,майтон - ты против договоренностей и раз так обьясни что такое POJO в твоем понимании)

Ты хочешь против меня использовать приёмы риторики. Не надо этого делать.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990402
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
mayton
Ломбок - это скотч которым сбоку к проекту что-то "примотали".

нифига ты не прав)
я думаю ты же понимаешь что такое ломбок в реальностти)
скомпилированый код выглядит так же ,как еслм бы ты нагадил там в ручную гет/сет + прочая лажа
так зачем нам в исходниках вся эта чулочная фабрикпс.олды как бы вы не сопротивлялись ломбок уже на проде крупнейших банков)я могу сказать что есть он в ГПБ и Сбере,Альфе и херовой тонне их партнеров)

тоесть можно сколько угодно пукать в воздух - но бут ,ломбок и ОРМ уже тут и давно тут)

хотите по другому- вам на кворк)

Зачем мне бинарник. Я после того как отдал его кастомеру - просто забываю о нем.
Мне исходный код важен. Я с ним работаю. И я плачу своим личным временем за все
технические долги.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990416
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот поэтому я и не люблю бины.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990439
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79

Ну и чем тебя не устраивает исходник с ломбоком?ты же знаешь что там будет таже портянка


С ломбоком, проблема в том, что он работает во время компиляции.
Поэтому рефлексия может работать странно.
Плюс начиная с 11 версии вообще рефлексия была поломана.
Так что как себя ведет ломбок на версиях джавы выше 11 не понятно.
И как бы особого удобства ломбок не приносит.
Иногда на сложных многомодульных проектах у ИДЕЯ от ломбока может "сносить крышу".
Плюс плагин для ломобока иногда не поспевает за EAP IDEA.

Если говорить об удобствах, то имеет смысл как альтернативу ломбок посмотреть на Котлин.
Data Class + лямбда apply решают все кейсы ломбока, при этом сам Котлин дает кучу "плюшек".
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990461
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
С ломбоком, проблема в том, что он работает во время компиляции.
Поэтому рефлексия может работать странно.
Плюс начиная с 11 версии вообще рефлексия была поломана.
Так что как себя ведет ломбок на версиях джавы выше 11 не понятно.
Чет боюсь рефлексия относится к lombok таким же образом как и спринг к особенностям конкретного сериализатора, т.е. никак.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990673
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Чет боюсь рефлексия относится к lombok таким же образом как и спринг к особенностям конкретного сериализатора, т.е. никак.


В ссылке, которой я давал, как раз разбирается кейс, когда Spring ведет себя странно из-за рефлексии и ломбока.
Ломбок работает, не так однозначно, как хотелось бы. Точно так же как и Spring.
А уж когда их "скрещивают", может быть все что угодно. :-)

Это, кстати, касается и Kotlin. По началу Spring работал с Kotlin очень странно.
Сейчас нормально. Может быть с ломбоком, сейчас проблем в Spring нет.

Я сейчас не использую ломбок, т.к. использую Kotlin.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990695
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
В ссылке, которой я давал, как раз разбирается кейс, когда Spring ведет себя странно из-за рефлексии и ломбока.
Ломбок работает, не так однозначно, как хотелось бы. Точно так же как и Spring.
А уж когда их "скрещивают", может быть все что угодно. :-)

Это, кстати, касается и Kotlin. По началу Spring работал с Kotlin очень странно.
Сейчас нормально. Может быть с ломбоком, сейчас проблем в Spring нет.

Я сейчас не использую ломбок, т.к. использую Kotlin.


Прямо откровение за откровением можно сказать... По ссылке что вы привели происходит следующее: два имбецила впихивают бизнес-логику в POJO и удивляются чего это оно работает не так как ожидается - так делать не нужно, потому то есть более правильные способы, это раз. Если попытаться разобраться в "проблеме" более глубже, то можно найти например такое обсуждение: https://github.com/FasterXML/jackson-databind/issues/1239, суть его примерно в следующем: в джексоне этих аннотаций для поддержки десериализации понакручено столько, что толком разобраться в том что происходит при включении тех или иных модулей и/или смене версий вообще невозможно, вывод отсюда такой: не нужно ничего накручивать вообще, а чем проще тем лучше. Lombok к поведению джексона здесь вообще никаким образом: они добавили java.beans.ConstructorProperties в далеком 2010 году, потому что в то время вообще не было никакой возможности узнать имена параметров к конструктора (java.lang.reflect.Executable#getParameters появился только в 1.8)

Spring ко всему этому имеет единственное отношение: имбецилы из бута (привет Стасу) зачем-то тащат lombok (у которого scope вообще должен быть provided) в spring-boot-dependencies, а хомячки радостно этот spring-boot-dependencies себе в проекты импортируют, как итог при смене версии бута еще и байткод начинает другой генерироваться.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990841
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

Вот об этом и речь.
Нафига использовать ломбок, если он не облегчает жизнь а усложняет.
Нужно уметь его готовить чтобы использовать.
При этом PROFIT'а от него 0.
Все что он может делается в IDE, без каких либо проблем.
<:o)
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990860
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Нафига использовать ломбок, если он не облегчает жизнь а усложняет.

с фига ли он не облегчает? еще как облегчает

mad_nazgul
Нужно уметь его готовить чтобы использовать

что там уметь? просто знать что он генерит?

mad_nazgul
При этом PROFIT'а от него 0

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

mad_nazgul
Все что он может делается в IDE, без каких либо проблем.

проблемы есть - нужны плагины (для того же builder, fluent, etc) и в итоге снова тонны бессмысленного кода
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990865
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Билдер не имеет мотивации к использованию в языках программирования где нет конструктора или он
необязателен но тем не менее вы можете спокойно инициализировать все поля.

И хотя контракт билдера может быть чуть сложнее чем просто инициализация полей - тем не менее.

Я думаю что в этих языках вы билдера просто не найдете.
Поэтому не стал бы идеализировать билдер или выделять его в какую-то особу категорию.

IDE позволяет поставить плагин которые печет билдеры как печенюшки? Позволяет.

Так-же как мы поступаем с toString, hashCode, equals. Мы на 99% доверяем IDE процесс кодо-генерации
и лишь слегка делаем измеенения там где нас что-то не устроило.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990893
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Билдер не имеет мотивации к использованию в языках программирования где нет конструктора или он
необязателен но тем не менее вы можете спокойно инициализировать все поля.

И хотя контракт билдера может быть чуть сложнее чем просто инициализация полей - тем не менее.

Я думаю что в этих языках вы билдера просто не найдете.
Поэтому не стал бы идеализировать билдер или выделять его в какую-то особу категорию.

[закатывает глаза], 3 абзаца текста... в каком месте я его идеализирую и выделяю в особую категорию ?
Это был просто пример конструкции, требующей массы довольно тривиального кода. Один из.

mayton
IDE позволяет поставить плагин которые печет билдеры как печенюшки? Позволяет.
Так-же как мы поступаем с toString, hashCode, equals. Мы на 99% доверяем IDE процесс кодо-генерации
и лишь слегка делаем измеенения там где нас что-то не устроило.
Зачем генерить 99% того, что мы не будем менять? я не знаю, стоит ли на 3й странице все еще пытаться доказывать преимущества отсутствия boilerplate по сравнению с его наличием. видимо нет.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990899
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha, да ладно не переживай так. Я просто забыл добавить что это грёбаное IMHO.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990913
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

Вот об этом и речь.
О чем речь-то? Вы утверждали что lombok ломает все и вся и имеет кучу проблем, а как выяснилось это не то что не совсем так, а даже совсем не так, ну и виртуозно им владеть совсем не нужно уметь, вон разработчики из бута мавеном пользоваться не умеет, а что-то при этом разрабатывают. Теперь вы решили переобуться и мы узнаем, что ну раз уж lombok не вредный, то он уж 100% бесполезный, иначе никак. А вот теперь вопрос: зачем мне на code review заниматься фигней и прорываться через портянки кода в надежде определить правильно там equals и hashCode реализованы или нет? или все ли там в конструкторы добавлено или нет? зачем мне вообще лишний код видеть?
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39990991
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
не понимаю противников ломбока
потому что ты не особо в теме: чтобы генерить код lombok использует "дыры" в javac, потому что по жавской конвенции AnnotationProcessor не должен гадить в генерируемый байткод, а должен складывать результат своей работы куда-то в другое место, т.е. с компиляторами отличными от javac lombok не работает, а это в свою очередь означает, что, например, полноценно с AspectJ работать оно не будет, точнее post compile time weaving работать может и будет (тут со средой разработки еще придется заморочиться), но вот inter-type declarations уже гарантированно отвалятся.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39991001
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
mad_nazgul

Вот об этом и речь.
О чем речь-то? Вы утверждали что lombok ломает все и вся и имеет кучу проблем, а как выяснилось это не то что не совсем так, а даже совсем не так, ну и виртуозно им владеть совсем не нужно уметь, вон разработчики из бута мавеном пользоваться не умеет, а что-то при этом разрабатывают. Теперь вы решили переобуться и мы узнаем, что ну раз уж lombok не вредный, то он уж 100% бесполезный, иначе никак. А вот теперь вопрос: зачем мне на code review заниматься фигней и прорываться через портянки кода в надежде определить правильно там equals и hashCode реализованы или нет? или все ли там в конструкторы добавлено или нет? зачем мне вообще лишний код видеть?


Я не утверждал, что ломбок ломает все и вся.
Я говорил, что при использовании ломбок могут возникнуть проблемы.
И что решение проблем не стоит того PROFIT, который дает ломбок.
Вы же подвердили мои слова, сказав, что ломбок надо уметь готовить.

Возникает вопрос - "Зачем?"
Зачем уметь готовить ломбок, когда можно его не использовать?
Все что "умеет" ломбок, делает кодогенерация в IDE.
При этом никаких побочных эффектов.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39991043
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Я говорил, что при использовании ломбок могут возникнуть проблемы.

проблемы могут возникнуть в любой момент с чем угодно. например с кривыми руками

mad_nazgul
Вы же подвердили мои слова, сказав, что ломбок надо уметь готовить.

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

mad_nazgul
И что решение проблем не стоит того PROFIT, который дает ломбок.

стоит, т.к. профит в плане удаления boilerplate в разы больше по сравнению с введением в язык лямбд, var и stream-ов вместе взятых.

mad_nazgul
Возникает вопрос - "Зачем?"

мы, по-моему, ходим кругами.

mad_nazgul
Все что "умеет" ломбок

ломбок умеет больше

mad_nazgul
кодогенерация в IDE.

кодогенерация бесполезного кода (тут прозвучала цифра 99% с которой я согласен) в исходник идет в задницу
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39991146
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Все что "умеет" ломбок, делает кодогенерация в IDE.
При этом никаких побочных эффектов.
У вас отношение к кодогенерации несколько превратное. Вот для меня кодогеренация, это когда у нас есть "нечто", написанное на каком-то DSL, мы вызываем mvn compile и на выходе у нас это же самое "нечто", но уже на другом DSL, а вот регулярное выполнение одной и той же последовательности каких-то действий в IDE - это не кодогенерация, а онанизм, как пример: мы можем один XML преобразовать в другой посредством применения регулярных выражений, а можем написать XSLT, в этом случае второй подход, очевидно, более качественный (я встречался с проектами, где бины по XSD/WSDL/YAML генерировали средой и сгененированный результат пихали прямо в СКВ - душераздирающее зрелище). То что вам что-то умеет генерировать среда - это никакой не контракт, и никто не гарантирует что все разработчики в команде будут выполнять одни и те же действия в одной и той же последовательности: завтра кто-то забьет и просрет конвенцию на is/get в случае boolean/Boolean, после завтра кто-то потеряет поля в equals и hashCode, а через день прилетит ПР исправляющий предыдущие косяки, в котором черт ногу сломит из-за тонны однотипного кода. Вопрос: зачем это все мне, когда есть 5 наиболее распространенных аннотаций, которые снимают кучу головной боли?
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39991315
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha

кодогенерация бесполезного кода (тут прозвучала цифра 99% с которой я согласен) в исходник идет в задницу


Так зачем использовать Java, когда можно использовать Kotlin, где эта кодогенерация в принципе не нужна?
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39991316
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
mad_nazgul
Все что "умеет" ломбок, делает кодогенерация в IDE.
При этом никаких побочных эффектов.
У вас отношение к кодогенерации несколько превратное. Вот для меня кодогеренация, это когда у нас есть "нечто", написанное на каком-то DSL, мы вызываем mvn compile и на выходе у нас это же самое "нечто", но уже на другом DSL, а вот регулярное выполнение одной и той же последовательности каких-то действий в IDE - это не кодогенерация, а онанизм, как пример: мы можем один XML преобразовать в другой посредством применения регулярных выражений, а можем написать XSLT, в этом случае второй подход, очевидно, более качественный (я встречался с проектами, где бины по XSD/WSDL/YAML генерировали средой и сгененированный результат пихали прямо в СКВ - душераздирающее зрелище). То что вам что-то умеет генерировать среда - это никакой не контракт, и никто не гарантирует что все разработчики в команде будут выполнять одни и те же действия в одной и той же последовательности: завтра кто-то забьет и просрет конвенцию на is/get в случае boolean/Boolean, после завтра кто-то потеряет поля в equals и hashCode, а через день прилетит ПР исправляющий предыдущие косяки, в котором черт ногу сломит из-за тонны однотипного кода. Вопрос: зачем это все мне, когда есть 5 наиболее распространенных аннотаций, которые снимают кучу головной боли?


Хороший аргумент.
Просто я данную проблему обычно решаю через codestyle и ревью кода.
Но если для вас, это преимущество является решающим, то да. Для вас ломбок удобная вещь.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39991344
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Так зачем использовать Java, когда можно использовать Kotlin, где эта кодогенерация в принципе не нужна?

заранее прошу прощения за аналогию: а зачем вытирать попу бумажкой, если есть биде ;) ? Нет возможности пользоваться котлин, по-крайней мере на ява-проектах. Да и на андроид-проектах - переписывать, то что есть, смысла нет, мешать в кучу - будет бардак.
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39991398
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
mad_nazgul
Так зачем использовать Java, когда можно использовать Kotlin, где эта кодогенерация в принципе не нужна?

заранее прошу прощения за аналогию: а зачем вытирать попу бумажкой, если есть биде ;) ? Нет возможности пользоваться котлин, по-крайней мере на ява-проектах. Да и на андроид-проектах - переписывать, то что есть, смысла нет, мешать в кучу - будет бардак.


ИМХО аналогия не точная.
Биде это скорее Scala, а не Kotlin.

Если продолжать "сортирную" аналогию.
То зачем вытирать попу газеткой (Java), когда есть туалетная бумага (Kotlin)
<:o)

А так, Kotlin в проекте, это обычно результат договоренности.
Использовать Kotlin на проекте с Java легче чем ломбок (по моему)
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #39991410
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
То зачем вытирать попу газеткой (Java), когда есть туалетная бумага (Kotlin)
спасибо за очень важное уточнение, теперь совсем другое дело

mad_nazgul
А так, Kotlin в проекте, это обычно результат договоренности.

вот как? не знал.

mad_nazgul
Использовать Kotlin на проекте с Java легче чем ломбок (по моему)

понятно
...
Рейтинг: 0 / 0
ServletContextListener.contextInitialized() выполнянется два раза
    #40005641
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение темы Ломбока.

В JDK 14 анонсирован джеб, который разрешает новый синтаксис классов. Так называемые Records.
https://openjdk.java.net/jeps/359 (немного вспоминается Паскаль). Пока что они - только для
финальных и иммутабельных классов.

Код: java
1.
record Point(int x, int y) { }



Но это уже хороший шаг чтобы избавиться от части "бойлерплейта" хотя-бы для сущностей.
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / ServletContextListener.contextInitialized() выполнянется два раза
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]