powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Авторизация в spring улетает в бесконечный цикл
78 сообщений из 78, показаны все 4 страниц
Авторизация в spring улетает в бесконечный цикл
    #40118728
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cам не могу понять, из-за чего проблема
Подскажите пожалуйста, что я не так делаю ?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class UserEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(nullable = false)
  private String name;

  @Column(nullable = false)
  @Email
  private String email;

  @Column(nullable = false)
  private String password;

  @ManyToMany(fetch = FetchType.EAGER)
  @JoinTable(
          name = "user_roles",
          joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") },
          inverseJoinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "id") }
  )
  private Set<RoleEntity> roles;
  
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class RoleEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(nullable = false)
  private String name;

  @ManyToMany(
          fetch = FetchType.EAGER,
          mappedBy = "roles"
  )
  private List<UserEntity> users;

  @ManyToMany(fetch = FetchType.EAGER)
  @JoinTable(
          name = "roles_authority",
          joinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "id") },
          inverseJoinColumns = { @JoinColumn(name = "autority_id", referencedColumnName = "id") }
  )
  private Set<PrivilegeEntity> privileges;
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class PrivilegeEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(nullable = false)
  private String name;

  @ManyToMany(
          mappedBy = "privileges",
          fetch = FetchType.EAGER
  )
  private Set<RoleEntity> roles;
}



На строке Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(email, password)); все улетает в бесконечный цикл до StackOverflowError
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  @ResponseStatus(HttpStatus.OK)
  @PostMapping("/signin")
  public AuthResponseDto signIn(@RequestBody AuthRequestDto authRequest) {
    try {
      String email = authRequest.getEmail();
      String password = authRequest.getPassword();

      Authentication authentication = authenticationManager.authenticate(
              new UsernamePasswordAuthenticationToken(email, password));

      CustomUserDetails customUserDetails = (CustomUserDetails) authentication.getPrincipal();
      String token = customTokenProvider.generateToken(email, customUserDetails.getRoles());
      return new AuthResponseDto(customUserDetails.getId(), email, token);

    } catch (Exception ex) {
      log.error("Bad email or password." + ex.getMessage());
      throw new BadCredentialsException("Bad email or password");
    }
  }


Спасибо!
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118729
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
з.ы. Вылазит при этом вот такое 100500 раз, это лишь часть:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
	at ru.korshun.solbeg.entity.PrivilegeEntity.hashCode(PrivilegeEntity.java:10) ~[main/:na]
	at java.base/java.util.HashMap.hash(HashMap.java:339) ~[na:na]
	at java.base/java.util.HashMap.put(HashMap.java:607) ~[na:na]
	at java.base/java.util.HashSet.add(HashSet.java:220) ~[na:na]
	at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:352) ~[na:na]
	at org.hibernate.collection.internal.PersistentSet.endRead(PersistentSet.java:355) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:239) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:224) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:198) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.endLoading(CollectionReferenceInitializerImpl.java:154) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishLoadingCollections(AbstractRowReader.java:232) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:190) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:96) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:87) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:710) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:76) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2217) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:595) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:264) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:591) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:149) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.PersistentSet.hashCode(PersistentSet.java:458) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at ru.korshun.solbeg.entity.RoleEntity.hashCode(RoleEntity.java:9) ~[main/:na]
	at java.base/java.util.HashMap.hash(HashMap.java:339) ~[na:na]
	at java.base/java.util.HashMap.put(HashMap.java:607) ~[na:na]
	at java.base/java.util.HashSet.add(HashSet.java:220) ~[na:na]
	at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:352) ~[na:na]
	at org.hibernate.collection.internal.PersistentSet.endRead(PersistentSet.java:355) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:239) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:224) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:198) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.endLoading(CollectionReferenceInitializerImpl.java:154) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishLoadingCollections(AbstractRowReader.java:232) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:190) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:96) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:87) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:710) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:76) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2217) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:595) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:264) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:591) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:149) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.PersistentSet.hashCode(PersistentSet.java:458) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at ru.korshun.solbeg.entity.PrivilegeEntity.hashCode(PrivilegeEntity.java:10) ~[main/:na]
	at java.base/java.util.HashMap.hash(HashMap.java:339) ~[na:na]
	at java.base/java.util.HashMap.put(HashMap.java:607) ~[na:na]
	at java.base/java.util.HashSet.add(HashSet.java:220) ~[na:na]
	at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:352) ~[na:na]
	at org.hibernate.collection.internal.PersistentSet.endRead(PersistentSet.java:355) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:239) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:224) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:198) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.endLoading(CollectionReferenceInitializerImpl.java:154) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishLoadingCollections(AbstractRowReader.java:232) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:190) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:96) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:87) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:710) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:76) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2217) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:595) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:264) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:591) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:149) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at org.hibernate.collection.internal.PersistentSet.hashCode(PersistentSet.java:458) ~[hibernate-core-5.6.1.Final.jar:5.6.1.Final]
	at ru.korshun.solbeg.entity.RoleEntity.hashCode(RoleEntity.java:9) ~[main/:na]
	at java.base/java.util.HashMap.hash(HashMap.java:339) ~[na:na]
	at java.base/java.util.HashMap.put(HashMap.java:607) ~[na:na]
	at java.base/java.util.HashSet.add(HashSet.java:220) ~[na:na]
	at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:352) ~[na:na]

...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118731
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korshun
На строке
до строки и после поставь вывод в лог свой текст.
Потом лог сюда с этого текста.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118734
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
korshun
На строке
до строки и после поставь вывод в лог свой текст.
Потом лог сюда с этого текста.

Надеюсь правильно понял, о чем речь
Код: java
1.
2.
Hibernate: select userentity0_.id as id1_7_, userentity0_.created_at as created_2_7_, userentity0_.email as email3_7_, userentity0_.first_name as first_na4_7_, userentity0_.last_name as last_nam5_7_, userentity0_.password as password6_7_, userentity0_.updated_at as updated_7_7_ from users userentity0_ where userentity0_.email=?
Hibernate: select roles0_.user_id as user_id1_6_0_, roles0_.role_id as role_id2_6_0_, roleentity1_.id as id1_3_1_, roleentity1_.name as name2_3_1_ from user_roles roles0_ inner join roles roleentity1_ on roles0_.role_id=roleentity1_.id where roles0_.user_id=?


Далее 100500 раз повторяются эти две строки
Код: java
1.
2.
Hibernate: select privileges0_.role_id as role_id1_4_0_, privileges0_.autority_id as autority2_4_0_, privilegee1_.id as id1_2_1_, privilegee1_.name as name2_2_1_ from roles_authority privileges0_ inner join privileges privilegee1_ on privileges0_.autority_id=privilegee1_.id where privileges0_.role_id=?
Hibernate: select roles0_.autority_id as autority2_4_0_, roles0_.role_id as role_id1_4_0_, roleentity1_.id as id1_3_1_, roleentity1_.name as name2_3_1_ from roles_authority roles0_ inner join roles roleentity1_ on roles0_.role_id=roleentity1_.id where roles0_.autority_id=?

...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118737
Аутентификация тут не причем - просто hashCode() неправильно объявлен, он зацикливается. Из PrivilegeEntity.hashCode() ты вызываешь у коллекции hashCode(), а та вызывает RoleEntity.hashCode(). А тот ссылается снова на PrivilegeEntity и вызывает у него hashCode().

Если ты работаешь с ORM, то старайся не переопределять equals()/hashCode() вообще. Они обычно не нужны и только приводят к проблемам.

PS: Первое что нужно делать при траблшутинге - хорошенько разобраться со стектрейсом.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118744
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Аутентификация тут не причем - просто hashCode() неправильно объявлен, он зацикливается. Из PrivilegeEntity.hashCode() ты вызываешь у коллекции hashCode(), а та вызывает RoleEntity.hashCode(). А тот ссылается снова на PrivilegeEntity и вызывает у него hashCode().

Если ты работаешь с ORM, то старайся не переопределять equals()/hashCode() вообще. Они обычно не нужны и только приводят к проблемам.

PS: Первое что нужно делать при траблшутинге - хорошенько разобраться со стектрейсом.

Хм, так hashCode() я и не переопределял и не вызываю его..
А почему они друг на друга ссылаются то ?
Сорри за глупые вопросы конечно..
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118746
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Покажи весь класс, там может быть какой-нибудь @Data из ломбок-а стоит
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118747
Т.к. ты не показал классы целиком, то я могу лишь догадываться, что ты используешь Lombok. И поставил (и зря) аннотацию @EqualsAndHashcode или @Data (очень зря).
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118750
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Т.к. ты не показал классы целиком, то я могу лишь догадываться, что ты используешь Lombok. И поставил (и зря) аннотацию @EqualsAndHashcode или @Data (очень зря).

Блин, @Data, стоит, да..
Целый день ковыряюсь, глаз замылился уже.
Ты волшебник)) Спасибо!
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118819
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
korshun
Stanislav Bashkyrtsev
Т.к. ты не показал классы целиком, то я могу лишь догадываться, что ты используешь Lombok. И поставил (и зря) аннотацию @EqualsAndHashcode или @Data (очень зря).

Блин, @Data, стоит, да..
Целый день ковыряюсь, глаз замылился уже.
Ты волшебник)) Спасибо!

@Data и @Entity рядом быть не должны от слова вообще
ЖПА вообще не требует переопределения eq/hsc так как сравнение идет по Id

ну и мой совет - уходите от таких библиотек- учитесь писать это руками,тем более любая современная IDE на лету сгенерит вам нужный код

мы сейчас столкнулись с проблемой перехода на 17 джаву как раз изза ломбока ,так как ребята почему не позаботились об обратной совсестимости ,да собственно и о прямой тоже в итоге мы выпилили эту либу их проекта,перешли на 17ю и теперь не зависим от каких то ребят,которые проспали на месяц вспышку...
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118837
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep,

Стас, ты опять забыл перед сном таблетки принять? Нормально компилится все под 17 жаву.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118866
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
adminDontSleep,

Стас, ты опять забыл перед сном таблетки принять? Нормально компилится все под 17 жаву.

почитай релиз лог от 6 октября их и подумай может ли оно нормально работать,пока еще очень много багов - мы решили пару месяцев подождать,пока будет стабильная версия
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118868
Андрей Панфилов, для перехода на новую Java нужно обновлять версию Lombok'a. Но при этом он сломал обратную совместимость - аннотации на полях больше не проставляются на методы по умолчанию. Не знаю насколько это все сложно чинить, может там глобальная конфигурационная опция есть ¯\_(ツ)_/¯

Мне тоже кажется Lombok странноватой зависимостью - доп сложности ради каких-то мелочей.. У меня счас одновременно два проекта: на одном есть, на другом - нет. На 2ом хорошо себя чувствую и без него.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118875
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislav Bashkyrtsev
Андрей Панфилов, для перехода на новую Java нужно обновлять версию Lombok'a. Но при этом он сломал обратную совместимость - аннотации на полях больше не проставляются на методы по умолчанию. Не знаю насколько это все сложно чинить, может там глобальная конфигурационная опция есть ¯\_(ツ)_/¯

Мне тоже кажется Lombok странноватой зависимостью - доп сложности ради каких-то мелочей.. У меня счас одновременно два проекта: на одном есть, на другом - нет. На 2ом хорошо себя чувствую и без него.

у ребят из ломбока было достаточно времении чтобы привести в порядок свой код до релиза 17й,либо там такое количество багов ,что просто отсутсвует капасити на фиксы,либо они просто забили болт- и то и другое неприемлимо - поэтому мы решили сделать ласт трай через пару мес - если не будет адекватных фиксов - ломбок из проекта мы удалим,тем более что в свете 17й джавы он уже теряет прежнюю актуальность
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118877
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я ошибаюсь, но мне кажется, что Стас совсем недавно со всей пролетарской ненавистью топил именно за Ломбок. Не?
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118886
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. Sak,
Дело в ненависти. У него максимализм, значит обсуждение невозможно. Только священные войны.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118916
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
у ребят из ломбока было достаточно времении чтобы привести в порядок свой код до релиза 17й,либо там такое количество багов ,что просто отсутсвует капасити на фиксы,либо они просто забили болт- и то и другое неприемлимо - поэтому мы решили сделать ласт трай через пару мес - если не будет адекватных фиксов - ломбок из проекта мы удалим,тем более что в свете 17й джавы он уже теряет прежнюю актуальность


Ты *банько из сказки морозко...

если вот тут вот внимательно почитать, то можно выяснить:
- существует вполне работоспособный workaround для maven, кто использует gradle пусть сам с ним приседает, ибо использовать gradle на не ведроидных проектах - это клиника, а в ведроиде там тренд идет на котлин
- автор пишет, что ломбок до сих пор совместим с жавой 1.6 + еще более другие стремные компиляторы поддерживаются - нынешним колхозникам из openjdk до такого уровня совместимости как раком до Китая, там мужик реально грамотный, и не тебе его поносить
- если не думать про то, что эти модули нахрен никому не нужны, а просто позволяют включить режим вахтера у разработчиков, ровно как и private/final методы, то там задается вполне праведный вопрос: какого хрена ограничения возникают в режиме компиляции?
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118924
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. Sak
Может я ошибаюсь, но мне кажется, что Стас совсем недавно со всей пролетарской ненавистью топил именно за Ломбок. Не?


Да он и за PostgreSQL одно время топил, потом чет начал поносить
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40118998
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
adminDontSleep
у ребят из ломбока было достаточно времении чтобы привести в порядок свой код до релиза 17й,либо там такое количество багов ,что просто отсутсвует капасити на фиксы,либо они просто забили болт- и то и другое неприемлимо - поэтому мы решили сделать ласт трай через пару мес - если не будет адекватных фиксов - ломбок из проекта мы удалим,тем более что в свете 17й джавы он уже теряет прежнюю актуальность


Ты *банько из сказки морозко...

если вот тут вот внимательно почитать, то можно выяснить:
- существует вполне работоспособный workaround для maven, кто использует gradle пусть сам с ним приседает, ибо использовать gradle на не ведроидных проектах - это клиника, а в ведроиде там тренд идет на котлин
- автор пишет, что ломбок до сих пор совместим с жавой 1.6 + еще более другие стремные компиляторы поддерживаются - нынешним колхозникам из openjdk до такого уровня совместимости как раком до Китая, там мужик реально грамотный, и не тебе его поносить
- если не думать про то, что эти модули нахрен никому не нужны, а просто позволяют включить режим вахтера у разработчиков, ровно как и private/final методы, то там задается вполне праведный вопрос: какого хрена ограничения возникают в режиме компиляции?

ну да ломбок настолько хорош,что не дружит с градл)Андрей иди выпей успокоительное)
так же не понял причем тут ведроидный проект- у нас к примеру клиент серверное приложение
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119542
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
ну да ломбок настолько хорош,что не дружит с градл)Андрей иди выпей успокоительное)
так же не понял причем тут ведроидный проект- у нас к примеру клиент серверное приложение


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

Объективно (без всяких инсинуаций в духе там хаки, а там не хаки):
- у ломбока есть довольно-такие большое комьюнити, игнорировать которое довольно глупо
- всякие движения в языке проходят довольно неторопливо, при этом результат на самом деле так себе, ну вот толку-то от этих record, если у них полноценных (т.е. как в ломбок) билдеров нет - сиди как дурак и шлепай конструкторы на пол-экрана, да копирования тоже нет (тут обязательно найдется кто-то, кто заявит, что много полей в классе - это якобы плохой дизайн. Нет.), т.е. record - это никакая не замена @Data, а просто детская поделка
- если пойти по ссылке, что я раньше давал, и посмотреть что сделали в ломбоке для того чтобы он без приседаний работал в 16-й жаве, то можно лицезреть картину маслом: чуваки сидели 7(!) лет, при этом в самом проекте jigsaw постулируется какая-то история про безопасность , а автор ломбок взял и через рефлексию все разломал - вот такая вот безопасность, так еще и в догонку задает довольно неприятные вопросы: какая нахрен здесь безопасность, если вы Security Manager убрали, ProcessBuilder в публичном API живет, а на файловой системе живет бинарник java? Вот такой вот "неприятный" автор ломбок.

Т.е. текущее состояние жавки примерно следующее: у нас совершенно ипанутое API для совершенно тривиальных вещей (ну например работа с массивами через пень колоду организована, java.lang.String#substring в UTF8 никак не умеет (сюрприз, да), лямбды такие, что без слез не глянешь + все что наболело), однако при этом у нас есть куча сборщиков мусора (в 1.6 их было 7 штук, сейчас даже считать лень) и никому не нужные модули - на мой взгляд это уже определенно стагнация.

Что касается твоего gradle, то вроде как я нигде не писал, что он не работает с ломбок - я писал, что чтобы пользоваться gradle в современных не ведроидных проектах нужно быть клиническим идиотом.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119723
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
adminDontSleep
ну да ломбок настолько хорош,что не дружит с градл)Андрей иди выпей успокоительное)
так же не понял причем тут ведроидный проект- у нас к примеру клиент серверное приложение


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

Объективно (без всяких инсинуаций в духе там хаки, а там не хаки):
- у ломбока есть довольно-такие большое комьюнити, игнорировать которое довольно глупо
- всякие движения в языке проходят довольно неторопливо, при этом результат на самом деле так себе, ну вот толку-то от этих record, если у них полноценных (т.е. как в ломбок) билдеров нет - сиди как дурак и шлепай конструкторы на пол-экрана, да копирования тоже нет (тут обязательно найдется кто-то, кто заявит, что много полей в классе - это якобы плохой дизайн. Нет.), т.е. record - это никакая не замена @Data, а просто детская поделка
- если пойти по ссылке, что я раньше давал, и посмотреть что сделали в ломбоке для того чтобы он без приседаний работал в 16-й жаве, то можно лицезреть картину маслом: чуваки сидели 7(!) лет, при этом в самом проекте jigsaw постулируется какая-то история про безопасность , а автор ломбок взял и через рефлексию все разломал - вот такая вот безопасность, так еще и в догонку задает довольно неприятные вопросы: какая нахрен здесь безопасность, если вы Security Manager убрали, ProcessBuilder в публичном API живет, а на файловой системе живет бинарник java? Вот такой вот "неприятный" автор ломбок.

Т.е. текущее состояние жавки примерно следующее: у нас совершенно ипанутое API для совершенно тривиальных вещей (ну например работа с массивами через пень колоду организована, java.lang.String#substring в UTF8 никак не умеет (сюрприз, да), лямбды такие, что без слез не глянешь + все что наболело), однако при этом у нас есть куча сборщиков мусора (в 1.6 их было 7 штук, сейчас даже считать лень) и никому не нужные модули - на мой взгляд это уже определенно стагнация.

Что касается твоего gradle, то вроде как я нигде не писал, что он не работает с ломбок - я писал, что чтобы пользоваться gradle в современных не ведроидных проектах нужно быть клиническим идиотом.

чувствую твою боль,спорить про лобмок я с тобой не буду ибо объективно сейчас он не рабочий,но я знаю что ребята его пофиксят и станет норм- и собственно непонятно чего ты заагрился

но самое главное - я бы хотел услышать вот этот момент- ты назвал систему модулей джава никому не нужной - у нас лиды хотя бить проект на модули - очень интересно будет послушать твои аргументы против модульной архтетектуры( пс это не сарказм )
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119725
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов,
давай без эмоций в отдельной теме поговорим
мне реально интересна твоя позиция,особенно в плане модулей джавы и как выше оказалось - почему ты называешь рекорды поделкой

но самый первый вопрос - почему ты считаешь что только идиоты сейчас будут свитчить на модули?
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119733
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов


Т.е. текущее состояние жавки примерно следующее: у нас совершенно ипанутое API для совершенно тривиальных вещей (ну например работа с массивами через пень колоду организована, java.lang.String#substring в UTF8 никак не умеет (сюрприз, да), лямбды такие, что без слез не глянешь + все что наболело), однако при этом у нас есть куча сборщиков мусора (в 1.6 их было 7 штук, сейчас даже считать лень) и никому не нужные модули - на мой взгляд это уже определенно стагнация.

Что касается твоего gradle, то вроде как я нигде не писал, что он не работает с ломбок - я писал, что чтобы пользоваться gradle в современных не ведроидных проектах нужно быть клиническим идиотом.

Андрей мне кажется ты либо на пенсию вышел ,либо заболел)
давай аргументы своим словам
ты пишешь градл плохо для всех ,кто не пишет на ведро
я тебе скажу что весь энтерпрайз на градле потому что там можно делать кастомные таски
жду аргументов по всем твоим эпитетам
1.градл плохл
2.Модули плохл
3.рекорды - детская поделка
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119740
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модули - суть дисциплина программирования. Это то с чем многие согласны но не могут посчитать в деньгах.
Вот какая дисциплина в JavaScript/Node.JS? Да никакой. Пишут как бох даст. К каждому проекту - персональный
уникальный фреймворк.

Может зайти со стороны секюрити? Ценная тема. Это как пожарная безопаность. Выж не спорите с пожарным
инспектором когда он говорит о статистике пожаров. Да. Пожары - страшная штука. Вот давеча весь мир был в огне.
Горела земля у тех кто Log4j2 затащил к себе в некотором диапазоне версий. Вот если-бы они использовали module-info.
Это помогало-бы локализовать опасные взаимодействия с пользователем? ХЗ.

Может зайти со стороны билда? Модули современного maven проекта? Хрен там. Модули maven и модули java9
пока - ортогональны и не знают друг друга.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119745
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
ты пишешь градл плохо для всех ,кто не пишет на ведро
ну это по факту так. Разве не видно хотя бы по нашей ветке?
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119747
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
аргументы против модульной архтетектуры( пс это не сарказм )
микросервисы прошли что ле?)))
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119764
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
ну вот толку-то от этих record, если у них полноценных (т.е. как в ломбок) билдеров нет - сиди как дурак и шлепай конструкторы на пол-экрана, да копирования тоже нет (тут обязательно найдется кто-то, кто заявит, что много полей в классе - это якобы плохой дизайн. Нет.), т.е. record - это никакая не замена @Data, а просто детская поделка

ну тут ты переборщил с пессимизмом)).
На самом деле огромный шаг вперед поддержка именно в языке.
В дельфях то TRecord уже лет 40 как)
То есть поддержка-носитель данных в Java это априори замечательно.
Ведь куда не плюнь нужна сериализация и классы без поведения.
А тут представь что нужен объект из 2 полей

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
class Point {

    private final int x;
    private final int y;

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    int x() { return x; }
    int y() { return y; }

    public boolean equals(Object o) {
        if (!(o instanceof Point)) return false;
        Point other = (Point) o;
        return other.x == x && other.y == y;
    }

    public int hashCode() {
        return Objects.hash(x, y);
    }

    public String toString() {
        return String.format("Point[x=%d, y=%d]", x, y);
    }
}


то есть для трёх строк нужна вот эта куча кода. Смешно)).
По поводу конструктора копирования то я не понял. Ты это от Сишников позавидовал?
Но ведь в Java это не надо.
Ну а биндинги и маппинги будут. Всё будет со временем даже если нету именно сейчас.
имхо
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119776
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
далее. Класс данных вводимый все таки отличается от ломбок подхода.
- отсутствие скрытого состояния
- запечатанный класс и нет наследования
- всё что нужно дается в конструкторе
-...
И это замечательно.
Ограничения в новом классе дают больше преимуществ чем мы теряем там где сложности абсолютно не нужны.
Разве не здорово выглядит попытка вернуть сразу два значения из метода?
Код: java
1.
2.
record MinMax(int min, int max);
public MinMax minmax(int[] elements) { ... }
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119783
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

А тут представь что нужен объект из 2 полей

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
class Point {

    private final int x;
    private final int y;

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    int x() { return x; }
    int y() { return y; }

    public boolean equals(Object o) {
        if (!(o instanceof Point)) return false;
        Point other = (Point) o;
        return other.x == x && other.y == y;
    }

    public int hashCode() {
        return Objects.hash(x, y);
    }

    public String toString() {
        return String.format("Point[x=%d, y=%d]", x, y);
    }
}


то есть для трёх строк нужна вот эта куча кода. Смешно)).
По поводу конструктора копирования то я не понял. Ты это от Сишников позавидовал?


на lombok это будет выглядеть так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@Data
@Builder(toBuilder = true)
public class Point {

    private final int x;
    private final int y;

}



или более развернуто:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
public class Point {

    private final int x;
    private final int y;

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public static PointBuilder builder() {
        return new PointBuilder();
    }

    public int getX() {
        return this.x;
    }

    public int getY() {
        return this.y;
    }

    public boolean equals(final Object o) {
        if (o == this) return true;
        if (!(o instanceof Point)) return false;
        final Point other = (Point) o;
        if (!other.canEqual((Object) this)) return false;
        if (this.getX() != other.getX()) return false;
        if (this.getY() != other.getY()) return false;
        return true;
    }

    protected boolean canEqual(final Object other) {
        return other instanceof Point;
    }

    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        result = result * PRIME + this.getX();
        result = result * PRIME + this.getY();
        return result;
    }

    public String toString() {
        return "Point(x=" + this.getX() + ", y=" + this.getY() + ")";
    }

    public PointBuilder toBuilder() {
        return new PointBuilder().x(this.x).y(this.y);
    }

    public static class PointBuilder {
        private int x;
        private int y;

        PointBuilder() {
        }

        public PointBuilder x(int x) {
            this.x = x;
            return this;
        }

        public PointBuilder y(int y) {
            this.y = y;
            return this;
        }

        public Point build() {
            return new Point(x, y);
        }

        public String toString() {
            return "Point.PointBuilder(x=" + this.x + ", y=" + this.y + ")";
        }
    }
}



т.е. можно писать:

Код: java
1.
2.
Point one = new Point(1,1);
Point two = one.toBuilder().y(2).build();



а если сделать так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Data
@With
@Builder(toBuilder = true)
public class Point {

    private final int x;
    private final int y;

}



то можно уже писать вот так:

Код: java
1.
2.
Point one = new Point(1,1);
Point two = one.withY(2);



т.е. жабские record выглядят "удобными" разве что на примере с Point, а как только мы осознаем что нам нужно работу работать, а не примеры смотреть, то сразу вылезают грабли, а если посмотреть на JEP 395 то можно невооруженным взглядом заметить наличие отсутствия параграфа про prior art.

PetroNotC Sharp

Разве не здорово выглядит попытка вернуть сразу два значения из метода?
Код: java
1.
2.
record MinMax(int min, int max);
public MinMax minmax(int[] elements) { ... }



для подобного офигенно не хватает петоновских tuple, генераторов как в петоне тоже не хватает, да и от петоновских массивов я бы тоже не отказался.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119798
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep

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


Ты год назад божился, что весь энтерпрайз на PostgreSQL, а потом вдруг выяснилось, что PostgreSQL - это поделка. Про gradle повторяться не хочу, почитай вот тут , ну или еще мои сообщения поищи...

adminDontSleep
я бы хотел услышать вот этот момент- ты назвал систему модулей джава никому не нужной - у нас лиды хотя бить проект на модули - очень интересно будет послушать твои аргументы против модульной архтетектуры


Проблема в том, что "моудльная архитектура" и "модули jigsaw" - это две совершенно разные вещи, "модульная архитектура" - это просто некая парадигма (набор паттернов и пр., которым уже несколько десятков лет, скорее всего отсчет идет с момента изобретения DLL, так что не знаю чего это вдруг твой архитектор внезапно решил что-то переделывать), которая говорит нам, что "хорошо бы делать так", при все при этом мы можем вполне легко определить что некая часть нашего приложения выглядит откровенно так себе, однако, когда нам приходится сравнивать два "условно хороших" решения, то мы сталкиваемся с тем, что какие-либо объективные метрики отсутствуют - включается некий собственный субъективизм + ссылки на каких-то упоротышей (упоротый дед Боб тому пример, или например последние движения в springboot - тамошние разработчики решили что циклические зависимости между бинами зло и при переходе на 2.6.1 прямым текстом в сообщении об ошибке так и пишут: ваш код говно, срочно идите его переделывать; при этом сам спринг нормально контекст собирает, да и javac прекрасно с задачей справляется). Если попытаться поиграть в аналогии и спроецировать "модульную архитектуру" на бытовой уровень, то в первом приближении получается так:

- отдельностоящие домохозяйства - круто: нет шумных соседей с детьми и перфораторами, можно выбирать поставщиков услуг и пр.
- квартиры - отстой: соседи, все являются заложниками ЖСК
- общаги - это для нищебродов

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

Если ближе к теме про "модульную архитектуру", то вот предлагаю обратить взор на финно-узбекские паттерны :

авторсобссно есть компонент. в хибере в энтитилистенере вставлен кафка продьюссер. просто в конструкторе инициализируется.
оттуда и шлет в топик все изменения сущностей.
продьюссер не инжектится в энтитилистенер а прям там через нью создается.

Т.е. если поциент из какого-то @PrePersist шлет сообщения сразу в кафку, то по мнению современных архитекторов такой дизайн - это треш и угар и так делать нельзя. А вот теперь вопрос: если мы из @PrePersist "уберем слово кафка", ну например будем слать событие на деревню дедушке, которое будет кем-то ловиться и дальше отправляться в кафку, то у нас уже будет хорошая архитектура или нет? На мой взгляд ответ на вопрос - "очевидно нет", поскольку помимо существования "бизнес-кода" у нас есть еще инфраструктурная часть и часть связанная с информационной безопасностью - а там приоритеты уже совершенно другие: надежность и безопасность, а не некая абстрактная красота. Т.е. в целом в "модульной архитектуре" каждый дрочит как хочет, лишь бы ЧСВ росло.

Почему "модули jigsaw" никакого отношения к "модульной архитектуре" не имеют?

- в жаве (ну или в maven или gradle) по большому счету у зависимостей нет понятия requires/provides как например в linux (т.е. когда мы говорим, что для работоспособности нашего приложения нужен интерпретатор sh, а какой он там будет из 10 возможных нам совершенно не важно) - мы когда хотим иметь какой-то JPA мы указывает вполне конкретную реализацию - по факту хибер или эклипслинк и все, да бывают ситуации, что некие особо упоротые считают что JPA-модели можно описать только аннотациями из JPA, однако эти мечты мгновенно разбиваются о тот факт, что при помощи JPA нельзя много чего описать, да и пара хиберовских аннотаций может улучшить производительность в пару-тройку раз, другие упоротыши считают что, несмотря на то что они используют spring в качестве DI, фичи спринга использовать ну никак нельзя, а нужно оставаться в рамках пакета "javax.inject" из-за чего постоянно изобретают какие-то велосипеды с надеждой что когда-то проект сможет безболезненно переехать на другой фреймворк... - чтобы правильно пилить такие огромные куски на модули нужно изначально все вдумчиво проектировать, а не собирать комитеты, занимающиеся ИБД (тут обязательно нужно вспомнить как спринг в итоге победил J2EE с EJB и пр. дерьмом)
- для разработчика весь этот распил rt.jar на отдельные модули не несет никакого профита (ах ну да, мы на диске аж 10 мегабайт скроим!), а вероятность того что мы сможем запустить оракловую жаву с java.base от какой-нибудь OpenJ9 равна нулю

Отсюда вопрос: а зачем это все делается-то?

У меня есть две теории на этот счет:
- банальный синдром вахтера: кто-то там сел, откопал баги 20-летней давности и решил что вот время наконец-то пришло, и пора бы запретить разработчикам залазить в рантайм, и насрать что приложения в серверы приложений уже как лет 5 никто не деплоит и работоспособность конкретного приложения сейчас целиком и полностью лежит на плечах вендора (ну может еще кто-то хочет денюжку на поддержке только жавы заработать)
- готовится база для насаживания всех на кукан и монетизации конкретных модулей, а хомячки сейчас это все забесплатно тестируют. Например с моей точки зрения запрет на использования кишок какого-то модуля имеет хоть какой-то смысл только с следующем сценарии: вот мы пишем какое-то приложение и хотим на него навесить некий модуль ИБ (ИБ здесь не с точки зрения того, что есть злые какеры, которые через log4j2 систему пробивают, а в смысле что Вася какие-то кнопки может нажимать, а какие-то нет) и нам кому-то (местной службе ИБ или аудитору) нужно доказать что наше приложение работает "безопасно", ну вот мы идем к вендору модуля ИБ, включаем модуль в поставку приложения, а у этого модуля все организовано так, что он там какие-то вызовы перехватывает, "расширить" его никак нельзя и поэтому вроде как все безопасно (у вендора бумажка есть).
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119802
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
нам нужно работу работать
мое имхо что прогер должен выбрать. Нужен ему обычный класс или класс данных.
У второго ограничения и выходящие из них преимущества.
В ломбоке вы получаете тот же самый класс.
Например, запрещено как в ломбоке добавлять свои скрытые поля в класс. И это дает кучу плюшек.
Имхо
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119804
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
модульная архитектура" - это просто некая парадигма (набор паттернов и пр., которым уже несколько десятков лет, скорее всего отсчет идет с момента изобретения DLL, так что не знаю чего это вдруг твой архитектор внезапно решил что-то переделывать),
+1))
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119807
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
а если посмотреть на JEP 395 то можно невооруженным взглядом заметить наличие отсутствия параграфа про prior art.
А если пройти по цепочке до исходного JEP395 , то
Non-GoalsIt is not a goal to declare "war on boilerplate"; in particular, it is not a goal to address the problems of mutable classes using the JavaBean naming conventions.
It is not a goal to add features such as properties, metaprogramming, and annotation-driven code generation, even though they are frequently proposed as "solutions" to this problem.
Поэтому вопрос: в чём недовольство-то?
Лично вас не устраивает? Ну так или не используйте или предложите собственный JEP.
В язык затащено всякого мусора? И что? Чем вам мешает то, что лично вы не используете (не хотите использовать)?
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119809
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Отсюда вопрос: а зачем это все делается-то?
Оно, вообще-то, вполне внятно озвучено.
Система модулей разработана, в первую очередь, для внутренних нужд разработки JDK.
Как, например, вы собираетесь выпиливать приснопамятный sun.mics.Unsafe, если у вас нет ни "устарело, на удаление" ни строгой инкапсуляции?
Как предлагаете реорганизовать откровенно неудачные решения Java SE API?
Или вас всё это не касается? Ну а в чём тогда дело? Java 8 доступна из кучи репозиториев и будет доступна до 2023-24 года, как минимум.
Следовательно, за это время можно спокойно переехать на Java 11 решив только те проблемы, которые мешают этому переезду.
И, например, многоверсионные JAR могут облегчить вашу работу. А это, опять-таки, заслуга "того самого" jigsaw.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119820
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Поэтому вопрос: в чём недовольство-то?
Лично вас не устраивает? Ну так или не используйте или предложите собственный JEP.
В язык затащено всякого мусора? И что? Чем вам мешает то, что лично вы не используете (не хотите использовать)?


вроде написал же уже:

Андрей Панфилов
текущее состояние жавки примерно следующее: у нас совершенно ипанутое API для совершенно тривиальных вещей (ну например работа с массивами через пень колоду организована, java.lang.String#substring в UTF8 никак не умеет (сюрприз, да), лямбды такие, что без слез не глянешь + все что наболело), однако при этом у нас есть куча сборщиков мусора (в 1.6 их было 7 штук, сейчас даже считать лень) и никому не нужные модули - на мой взгляд это уже определенно стагнация.


т.е. иными словами: хотелось бы чтобы вместо онанизма решались насущные проблемы.


Basil A. Sidorov
Система модулей разработана, в первую очередь, для внутренних нужд разработки JDK.


Хорошо, а зачем мне ее насаждать-то? Какого хрена я при переходе на новую версию жавы должен что-то глобально переделывать?

Basil A. Sidorov
Как, например, вы собираетесь выпиливать приснопамятный sun.mics.Unsafe, если у вас нет ни "устарело, на удаление" ни строгой инкапсуляции?


Здесь я сразу вспомнил один из видосиков, которые постоянно mayton постит, там перец несколько минут гордился тем, что возможность использования sun.mics.Unsafe таки оставили, однако: дохрена народа пользуются sun.mics.Unsafe, хоть и приходится его получать через одно место - разработчики же JDK по какой-то невероятной причине этот факт попусту игнорируют, вот что мешало сделать System.unsafe 15 лет назад? Я никаких других причин кроме как синдрома вахтера не вижу: в С ассемблерные вставки можно, в .Net и Rust unsafe можно, в петоне биндинги к внешним библиотекам - это вообще само собой разумеющееся, а в жаве писать lock-free алгоритмы - это оказывается великая привилегия разработчиков JDK, а черни не дозволено.

Basil A. Sidorov
многоверсионные JAR могут облегчить вашу работу. А это, опять-таки, заслуга "того самого" jigsaw


"облегчить" - на мой взгляд уж слишком оптимистичное заявление...
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119835
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
мое имхо что прогер должен выбрать. Нужен ему обычный класс или класс данных.
У второго ограничения и выходящие из них преимущества.
В ломбоке вы получаете тот же самый класс.
Например, запрещено как в ломбоке добавлять свои скрытые поля в класс. И это дает кучу плюшек.
Имхо


Вот если бы в record в качестве полей можно было бы использовать только примитивы и другие record, то было бы круто - т.е. данные были бы только данными без каких-либо сайд-эффектов, там бы и десериализация была бы безопасная и пр., а так профита от этого нет.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119839
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Дак оно так и есть. Не? Дай примерчик.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119843
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
т.е. иными словами: хотелось бы чтобы вместо онанизма решались насущные проблемы.
"Лес не вертится сам по себе" (ц) м/ф "Правдивая история Красной шапочки".
Добавлю ещё, что и мир не крутится вокруг программистов.Хорошо, а зачем мне ее насаждать-то? Какого хрена я при переходе на новую версию жавы должен что-то глобально переделывать?"Мир меняется ... Вот, уже и в воздухе чем-то запахло" (ц) х/ф "Братва и кольцо".
Не хотите ничего переделывать - оставайтесь на Java 8.
Хотите перейти на новую версию без переделки ваших приложений - делайте форк Java 8 JDK и интегрируйте туда только те фичи, которые нужны лично вам.Здесь я сразу вспомнил один из видосиков ... Я никаких других причин кроме как синдрома вахтера не вижу: ...Я поскипал много неаргументированных буков и просто повторю, что вокруг вас мир не вертится.
Это можно понять из простого чтения JEP-ов.
И, кстати, именно потому, что пятнадцать лет назад миндальничали со всякими Netty/Кафка/e.t.c. и нарисовалась та самая задница, которая вам так активно не нравится."облегчить" - на мой взгляд уж слишком оптимистичное заявление...А у меня - другое мнение.
Будем меряться пип мнениями или, всё-таки, сойдёмся том, что другой (мета)вселенной (лично для вас) никто не напишет?
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119845
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Андрей Панфилов,
Дак оно так и есть. Не? Дай примерчик.


Думаешь не скомпилится?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public record Point(Coordinate x, Coordinate y) {

    public Point {
        System.exit(0);
    }

    public static class Coordinate {

        private final int value;

        public Coordinate(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }
}
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119846
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Класс для данных. Отсюда только статические поля и сам record как поле.
Отсюда абсолютная прозрачность потрохов для всех снаружи.
Отсюда полная прозрачность для сериализации и маршаллинга.
Считай дерево данных tree record или json record
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119847
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
PetroNotC Sharp
Андрей Панфилов,
Дак оно так и есть. Не? Дай примерчик.


Думаешь не скомпилится?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public record Point(Coordinate x, Coordinate y) {

    public Point {
        System.exit(0);
    }

    public static class Coordinate {

        private final int value;

        public Coordinate(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }
}


static плохой тон)
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119861
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
static плохой тон)


Да какая разница, плохой или не плохой, оно же специально для тебя написано было, чтобы смог скомпилировать... ты же получил синтаксический сахарок и начал делать далеко идущие выводы - про сериализацию, иммутабельность и пр. - ничем подобным там и не пахло.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119869
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Как какая разница если статик это не состояние карл.
В классе данных не должно быть скрытого состояния. Что позволяет ломбок.
Написать то можно любую хрень. Но ты выше написал сноску - "нам же работать надо".
Тогда давай от задачи идти.
Чем не пахло если в примере ты не изменил состояние. Что отлично сериализуется.
Мне сложно рассматривать всякую хрень которая лишь бы скомпилилась.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40119870
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Для пессимистов статья
https://nipafx.dev/java-record-semantics/
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120019
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов,
так и не услышал ни одного внятного аргумента против мудулей,
Про ломбок вообще вообще нет ни одного аргумента,кроме что вот это удобно...
а потом удобно ждать пару мес пока деятиели из ломбока пофиксят баги? или проще нажать generate getter/setter
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120033
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep,
А ты сам то вообще молчишь.
То что ломбок удобен разве ж этого мало)))
Ну а с приходом record и ломбок твой помрет.
Так как pojo тупые классы это все что нужно в java
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120038
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
adminDontSleep,
А ты сам то вообще молчишь.
То что ломбок удобен разве ж этого мало)))
Ну а с приходом record и ломбок твой помрет.
Так как pojo тупые классы это все что нужно в java

мне некогда говорить) работы выше крыши
фактически что можно сказать - Андрей что то сказал- аргументировать не смог
ломбок -удобно -но этого мало- он должен на выходе новых версий джавы показывать отсутсие багов
я почитал их лог на октябрь и у меня волосы на голове дыбом встали - ребят ,а что вы делали то раньше - диструбутив 17й был доступен уже 100500 лет - почему не было фиксов?

с таким отношением понятно они растеряли аудиторию ,я был в числе их почитателей- но ребята жестко обкакались - а это неприемлимо в той сфере ,где я работаю,поэтому ломбок пошел под нож,теперь только языковые фичи
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120042
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
ломбок пошел под нож
думаю не ты там решаешь, под нож или нет.
Переписывать легаси или нет.
Больно быстро тебя качает ветром.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120043
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
мне некогда говорить) работы выше крыши
это отмазка для детей.
Покажи как ты работу работаешь.
As is to be.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120048
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Развивая идею иммутабельных DTO, я-бы предложил ввести tuple, как в функциональных языках.
Мне иногда не хватает. А apache-common pair затягивать не хочется да и не красиво.

Типа вместо

Код: java
1.
2.
3.
Pair<String,String> splitUrl(String url) {
   ....
}



ввести нечто вроде

Код: java
1.
2.
3.
 {String,String} splitUrl(String url) {
   ....
}



и алиасы элементов ответа типа первый и второй.

Код: java
1.
2.
_1
_2
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120052
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: java
1.
2.
3.
Pair<String,String> splitUrl(String url) {
   ....
}

не врубаюсь. Дай вход и выход
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120058
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
adminDontSleep
мне некогда говорить) работы выше крыши
это отмазка для детей.
Покажи как ты работу работаешь.
As is to be.

я скажу так - к нам пришел новый лид -он консервативных взгляов-начал топить за чистоту кода - в том числе за выпил любых сторонних либ,в том числе ломбока и мапстракта и тд
мы с ним прям конкретно ругались -но сейчас я вижу что он был прав- тащить к себе в проект такие либы - бывает чревато тем,чьто потом придется переписывать пол проекта - что мы сейчас и сделали - выпилили к херам этот говноломбок
и в какой то момент ты начинаешь понимать что такое языковые интсрументы ,а что такое какие то посторонние либы
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120059
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая разница? Придумай сам как разбить url на две части.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120060
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Развивая идею иммутабельных DTO, я-бы предложил ввести tuple, как в функциональных языках.
Мне иногда не хватает. А apache-common pair затягивать не хочется да и не красиво.

Типа вместо

Код: java
1.
2.
3.
Pair<String,String> splitUrl(String url) {
   ....
}



ввести нечто вроде

Код: java
1.
2.
3.
 {String,String} splitUrl(String url) {
   ....
}



и алиасы элементов ответа типа первый и второй.

Код: java
1.
2.
_1
_2



а почему дто должно быть имутабельно? есть кейсы где от создания до выдачи сотни методов,которые так или иначе мутируют это дто
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120061
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
А какая разница? Придумай сам как разбить url на две части.

он не сможет)опять же стринг это имутейлбл - разбитие создаст два новых объекта в хипе- петро про это ничего не знает ,да и не надо оно ему
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120062
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не против таких кейсов. Тогда вам не нужен ни record ни tuple.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120063
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Я не против таких кейсов. Тогда вам не нужен ни record ни tuple.

сложно оспорить)
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120075
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А какая разница? Придумай сам как разбить url на две части.
его можно разбить по разделителю символу на n частей.
Почему именно на две я не понял)
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120077
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
PetroNotC Sharp
пропущено...
это отмазка для детей.
Покажи как ты работу работаешь.
As is to be.

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

Мне интересны технические подробности а не то как вы водку пили.
С ломбоком код 3 строки. Без него 53 строки. Выше есть пример кода.
У вас проект из 3х файлов был?
Вечером решили и утром выпилили.
Болтун какой то.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120080
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

ещё б он за выпил хибера топил - был бы пай-мальчик
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120081
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
А какая разница? Придумай сам как разбить url на две части.
его можно разбить по разделителю символу на n частей.
Почему именно на две я не понял)

Давай по другому. На вход приходит емейл. И надо его разбить на имя пользователя и почтовый домен.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120082
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И надо его разбить на имя пользователя и почтовый домен.
split("@")
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120087
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
adminDontSleep
пропущено...

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

Мне интересны технические подробности а не то как вы водку пили.
С ломбоком код 3 строки. Без него 53 строки. Выше есть пример кода.
У вас проект из 3х файлов был?
Вечером решили и утром выпилили.
Болтун какой то.

Очковал он. Страховался от каких-то последствий. Ему было проще выпилить ломбок
и не иметь проблем.

Каких - ХЗ. Вот зовите в топик этого лида пусть расскажет.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
И надо его разбить на имя пользователя и почтовый домен.
split("@")

Ну и какой контракт у сплита? Может вернуть 0 элементов. Можеть мильон.

Ерунда короче. Верно? А если возвращается пара - у тебя всё чётко. Как у чётких поцанчиков.
На вход - строка. На выход две. Можешь модульные тесты писать и интерфейс объявлять.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120110
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
PetroNotC Sharp
пропущено...
его можно разбить по разделителю символу на n частей.
Почему именно на две я не понял)

Давай по другому. На вход приходит емейл. И надо его разбить на имя пользователя и почтовый домен.
ну дак другое дело. Постановщик блин))
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120114
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ему было проще выпилить ломбок
трудоемкость прикинул? Хотя бы количество нулей.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120117
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

авторНу и какой контракт у сплита? Может вернуть 0 элементов. Можеть мильон.
при 0 и мильоне - отрицательный результат тоже результат - значит на входе не мыло.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120119
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton,

авторНу и какой контракт у сплита? Может вернуть 0 элементов. Можеть мильон.
при 0 и мильоне - отрицательный результат тоже результат - значит на входе не мыло.
Забей короче. Тебе это не понадобиться.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
Ему было проще выпилить ломбок
трудоемкость прикинул? Хотя бы количество нулей.

От проекта зависит. Может у них 99% всех DTO-шек идут кодогенратором от Soap или Swagger.
Так им что Ломбок что не-ломбок. Генератор поменяли и всё.

А оставшийся 1% можно руками добить.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40120142
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Так им что Ломбок что не-ломбок. Генератор поменяли и всё
вот почему я и говорил, что стас ноль в обсуждении архитектуры.
Так как вероятность что у них генератор все писал 0,1 процент.))))
Остальные 99,9 сам знаешь что).
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40121253
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Андрей Панфилов,
Как какая разница если статик это не состояние карл.
В классе данных не должно быть скрытого состояния. Что позволяет ломбок.
Написать то можно любую хрень. Но ты выше написал сноску - "нам же работать надо".
Тогда давай от задачи идти.
Чем не пахло если в примере ты не изменил состояние. Что отлично сериализуется.
Мне сложно рассматривать всякую хрень которая лишь бы скомпилилась.


Ты хоть бы про синтаксис джавы что-то для начала почитал, прежде чем спорить... конечно static class - это не состояние, это декларация класса, чтобы ты мог код в один файл скопипастить и убедиться в свой неправоте. Что там нехорошего позволяет делать ломбок - это никакого отношения к обсуждаемому вопросу не имеет, про лобмок есть два тезиса:
- он позволяет быстро лепить билдеры, еще раз: создавать record на >3 полей употеешь (и не нужно лечить дичь, что полей должно быть мало)
- он позволяет легко и непринужденно обогащать данные за счет тех же билдеров или with (по твоей ссылке with якобы собираются завести, но когда никто не знает)

что касается каких-то там утверждения "полная прозрачность для сериализации и маршаллинга" - то нихрена такого нет, потому что поля могут быть как-то угодно типа, вообщем примерно как с Serializable - хотели сделать хорошо, а получили в итоге RCE, сейчас тоже начинает довольно не хорошо попахивать:
- существует безумное количество проповедников, топящих за то, что @Autowired в спринге - это попс, а нужно все через конструкторы инжектить, потому что потому
- гении из JetBrains догадались влепить инспекцию, которая настоятельно рекомендует для случаев описанных выше вместо старых добрых классов использовать record

так что скоро все проекты захлестнет цунами говнокода
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40121266
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Ты хоть бы про синтаксис джавы что-то для начала почитал, прежде чем спорить... конечно static class - это не состояние, это декларация класса, чтобы ты мог код в один файл скопипастить и убедиться в свой неправоте.

А где неправота в утверждении
В классе данных не должно быть скрытого состояния.
Ломбок позволяет добавить скрытое приватное свое поле. Новый синтаксис нет.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40121289
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
mayton
Я не против таких кейсов. Тогда вам не нужен ни record ни tuple.

сложно оспорить)

Есть очень древний технический спор. Он - гораздо старше Java. В основном это спор функциональщиков и
сторонников обычного программирования. Вобщем функциональщики топят за неизменяемые объекты.
Интерес к этому спору периодически возникает. Особенно когда изучаеются проблемы мультипоточки
(гонки и concurrency). Вобщем вам не надо синхронизировать поля record и вы можете один объект
шарить хоть на мильон потоков. Будет всё безопасно по определению. А в обычных DTO где вы
имеете "состояние" - вы обязаны ставить synchronized или другие механизмы. Слава богу если
вы уверены что ваш объект не шарится нигде глобально. Но .. как говорил Мартин Одерский
в одном из очень старых семинаров.... что-то вроде Mutable objects tend to incapsulate global states.

И хотя я не вижу в джебах (не в Goals, и не в Non-Goals) никакой ссылки на этот артефакт,
мне кажется что это такой себе кивок в сторону ФП. Или грубо говоря, лучшие практики
ФП (лаборатории) плавно перетекают в промышленное императивное программирование.
И думающие люди их настойчиво предлагают в jeps. Хотя и наделяют их совсем другими
формулировками и обоснованиями. Синергия ФП все равно присутствует.

Ну а если вам надо часто модифицировать часть объекта (DTO) - то подумайте. Может
быть в этом объекте нету признаков Single responsibility. Или может ему не хватает
покрывающего конструктора. Короче должно быть какое-то обоснование такой работы.
(насчет JPA/Hiber я не имею ничего против но это слишком далеко от темы Java language)
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40121318
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
И в дельфи и в шарпе есть специальный "класс данных".
И нужно очень хорошо обосновать почему вдруг в java такой не нужен.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40121372
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Андрей Панфилов#22411553]
- существует безумное количество проповедников, топящих за то, что @Autowired в спринге - это попс, а нужно все через конструкторы инжектить, потому что потому/quot]

@Autowired неудобен при тестировании - поэтому предпочтение отдается конструкторам
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40121552
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
А где неправота в утверждении
В классе данных не должно быть скрытого состояния.
Ломбок позволяет добавить скрытое приватное свое поле. Новый синтаксис нет.

читать научить для начала, потом вопросы задавай.
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40121573
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Я понял. Ваш уровень не позволяет опускаться и разъяснять.
Удачи!
...
Рейтинг: 0 / 0
Авторизация в spring улетает в бесконечный цикл
    #40122223
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep

мне некогда говорить) работы выше крыши
фактически что можно сказать - Андрей что то сказал- аргументировать не смог
ломбок -удобно -но этого мало- он должен на выходе новых версий джавы показывать отсутсие багов
я почитал их лог на октябрь и у меня волосы на голове дыбом встали - ребят ,а что вы делали то раньше - диструбутив 17й был доступен уже 100500 лет - почему не было фиксов?

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


Зачем нужен lombok, когда есть Koltin. <:o)
...
Рейтинг: 0 / 0
78 сообщений из 78, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Авторизация в spring улетает в бесконечный цикл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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