Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Очень много CompletableFuture  [new]
Zzz79
Member

Откуда:
Сообщений: 63
Таже самая петрушка и у нас- кто то один увидел эту шляпу и теперь она сплошь и рядом во всех наших сервисах,где надо и где не надо
ловить ошибки становится тяжело,код превращается в какую то трудно поддерживаемую шляпу

по этому поводу недавно у нас был митинг - сказали теперь каждый стрим и комплфьючер должен быть обоснован иначе получите по щщам
23 мар 20, 10:08    [22104251]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
mayton
Member

Откуда: loopback
Сообщений: 45459
Стас. Ты?
23 мар 20, 10:39    [22104269]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Zzz79
Member

Откуда:
Сообщений: 63
mayton,я)
23 мар 20, 11:56    [22104357]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
mayton
Member

Откуда: loopback
Сообщений: 45459
Заколебал усы менять. Прибереги хоть этот акк.
23 мар 20, 12:11    [22104372]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
andreykaT
Member

Откуда:
Сообщений: 2720
Zzz79
Таже самая петрушка и у нас- кто то один увидел эту шляпу и теперь она сплошь и рядом во всех наших сервисах,где надо и где не надо
ловить ошибки становится тяжело,код превращается в какую то трудно поддерживаемую шляпу

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

я вот не пойму ты то откуда знаешь где надо где не надо.

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

Сообщение было отредактировано: 23 мар 20, 14:44
23 мар 20, 14:44    [22104512]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
WGA
Member

Откуда:
Сообщений: 395
Андрей Панфилов
bob1970

Примерно так:
    @Override
    public CompletableFuture<Void> add(@NotNull TEntity entity) {
        return CompletableFuture.runAsync(() -> {
            EntityManager entityManager = factory.createEntityManager();
            try {
                EntityTransaction transaction = entityManager.getTransaction();
                try {
                    transaction.begin();
                    entityManager.persist(entity);
                    transaction.commit();
                } catch (Exception ex) {
                    transaction.rollback();
                    throw ex;
                }
            } catch (Exception ex) {
                LOGGER.error(this.getClass().getName() + " add item error ", ex);
                throw ex;
            } finally {
                entityManager.close();
            }
        }, executor);
    }
Это же реализация репозитория, причем посредственная, я же спрашивал как организовать бизнес-логику, когда нужно два репозитория использовать.
Я так понимаю, ручное управление транзакциями используется именно по причине асинхронности выполнения, spring-tx привязывает транзакцию к потоку выполнения, а тут такое... Т.е. несколько обращений к репозиторию в одну транзакцию вообще не объединить?
25 мар 20, 10:09    [22105536]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
WGA
Т.е. несколько обращений к репозиторию в одну транзакцию вообще не объединить?
Да там куча приколов помимо этого, например:

public interface IBaseRepository<TEntity, TFilter> {
...
    CompletableFuture<List<TEntity>> getRange(@NotNull TFilter filter);
...
    CompletableFuture<TEntity> getItem(@NotNull Object id);
...
}

Из-за того, что транзакцию прилепить некуда в сущностях нельзя использовать поля с FetchType.LAZY, ну или вообще поля с сущностями использовать нельзя, а только идентификаторы, в следствие чего вылезают какие-то нереальные грабли, например:
- при классическом подходе повторный getItem тащит сущность из памяти, а здесь она каждый раз чистая достается, т.е. если сущность у нас мутирует, то ее придется постоянно по стэку таскать (еще и код более тщательно ревьювить)
- использование идентификаторов в полях сущностей убивает кучу возможностей, предоставляемых Criteria API, в т.ч. статическую типизацию

т.е. получается, что взяли довольно тяжелый ОРМ, у которого есть куча своих проблем, начали его использовать через Ж, и растеряли все его преимущества, которые хоть как-то нивелировали его тяжесть.
25 мар 20, 10:37    [22105550]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
WGA
Т.е. несколько обращений к репозиторию в одну транзакцию вообще не объединить?
по старинке это так
  try {
 transaction.begin();  
ем. ПервоеОбращение()
ем. ВтороеОбращение() 
25 мар 20, 11:24    [22105574]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Zzz79
Member

Откуда:
Сообщений: 63
andreykaT
Zzz79
Таже самая петрушка и у нас- кто то один увидел эту шляпу и теперь она сплошь и рядом во всех наших сервисах,где надо и где не надо
ловить ошибки становится тяжело,код превращается в какую то трудно поддерживаемую шляпу

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

я вот не пойму ты то откуда знаешь где надо где не надо.

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

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

мне так то пофиг на это,но оно дебажится не очень хорошо ,а я этим очень частно занимаюсь и конечно мне это тоже не очень нравится
25 мар 20, 11:36    [22105579]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
PetroNotC Sharp
по старинке это так
  try {
 transaction.begin();  
ем. ПервоеОбращение()
ем. ВтороеОбращение() 
Это убивает всю идею паттерна "репозиторий"
25 мар 20, 12:04    [22105608]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
mayton
Member

Откуда: loopback
Сообщений: 45459
Топик (CompletableFuture) убивает идею консистентности данных по интерфейсу.
25 мар 20, 12:15    [22105619]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
забыл ник
Member

Откуда:
Сообщений: 3241
CompletableFuture - это тупая попытка перетянуть continuation монаду в императивный язык. Стримы хоть как-то взлетели, а эти спекописатели все никак не успокоятся. Ну нельзя перетянуть только часть идеи.
Все описанные проблемы решаются в рамках ФП парадигмы, но при этом конечно появляются другие, но не такие ущербные, так что золотой пули все же нет.
25 мар 20, 12:23    [22105626]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
Андрей Панфилов
убивает

mayton
убивает
😁
Надо подумать...
25 мар 20, 12:41    [22105639]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
mayton
Member

Откуда: loopback
Сообщений: 45459
Язык определяет сознание. Вот с тех пор как Oracle перешел на полу-годичный цикл Sep/March/YYYY
релизов - именения пошли просто бешеные. Такого не было до восьмерки. И комьюнити начало
закидывать в язык новые идеи. Но новые идеи часто просто украдены из смежных языков
и технологий где они органичны.

Что еще нужно затащить в этот скромный и консервативный язык чтобы окончательно
его превратить в помойку? Хотите язык где есть всё и только чёрта в ступе не хватает?
Идите в Scala. Там есть любой анальный вибратор чтоб пощекотать себе очько. И логику
можно описать 20 способами. Но нет же. Не идут в Скала. Тяжело там. Хотят мозговой
онанизм внутри java.
25 мар 20, 12:54    [22105649]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
Андрей Панфилов
PetroNotC Sharp
по старинке это так
  try {
 transaction.begin();  
ем. ПервоеОбращение()
ем. ВтороеОбращение() 

Это убивает всю идею паттерна "репозиторий"
подумал....
Не понял связи.
Паттерн репозиторий это работа с коллекцией из бд не замечая самой бд.
Транзакции к этому функционалу побоку.
...
Понятно, что тут намешено всего. Транзакции jpa, транзакции спринга и менеджер сущностей.
Проблема писателей кода.
25 мар 20, 15:35    [22105780]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
PetroNotC Sharp
подумал....
Не понял связи.
Паттерн репозиторий это работа с коллекцией из бд не замечая самой бд.
Транзакции к этому функционалу побоку.
Нет, репозиторий нужен для того, чтобы API для работы с данными (в общем случае не rdbms) не выставлять наружу, при этом "по классике" репозиторий сам присоединяется к текущей транзакции (это правда уже задача менеджера транзакций, но в целом я могу спокойно часть кода делать на ОРМ, а другую часть на JDBC (тут я не понимаю всяких бакланов, желающих все делать через native query в JPA - это неправильно)), т.е. в первом приближении я могу в приложении взять и заменить ОРМ на что-то другое, как только я начал таскать EntityManager по бизнес-логике, я сразу же теряю эту возможность (востребована ли в реальности эта возможность или нет - это другой вопрос уже).
25 мар 20, 18:15    [22105854]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
Андрей Панфилов
Нет, репозиторий нужен для того, чтобы API для работы с данными (в общем случае не rdbms) не выставлять наружу
моими словами "не замечая бд"

Андрей Панфилов
при этом "по классике" репозиторий сам присоединяется к текущей транзакции
с чего это Сам?
Есть ручное управление когда в коде пишу.
Есть автоматическое на аннотациях. Декларативное.
Они равноправны. И оба мной любимы.
Поменять реализацию ОРМ позволяет JPA.
Имхо
25 мар 20, 18:43    [22105889]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
PetroNotC Sharp
с чего это Сам?
Потому что в спецификации так написано:
jpa specification
The PersistenceContext annotation is used for entity manager injection. The type element
specifies whether a transaction-scoped or extended persistence context is to be used, as described in section
7.6. The synchronization element specifies whether the persistence context is always automatically
joined to the current transaction (the default) or is not joined to the current transaction unless
the joinTransaction method is invoked by the application. The unitName element may optionally
be specified to designate the persistence unit whose entity manager factory is used by the container.
The semantics of the persistence context synchronization type are further described in section 7.6.1.
Section 10.5.2 provides further information about the unitName element.

т.е. чтобы в житуи EM не присоединялся к текущей транзакции нужно специально приседать, спринговая инфраструктура работает точно также, т.е. если у кого-то это не так, то это значит что в проекте творится полная Ж.
25 мар 20, 23:23    [22106010]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
Андрей Панфилов,
Ну хорошо, добавляем третий вариант управления транзакциями:
- по умолчанию (ничего не пишем)
- ручное em.дайТранзакцию.Старт
- аннотации
Все логично, и меня все три варианта устраивают.
26 мар 20, 07:42    [22106095]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Герой дня
Member

Откуда: obmanula.ru
Сообщений: 30547
Андрей Панфилов
WGA
Т.е. несколько обращений к репозиторию в одну транзакцию вообще не объединить?
Да там куча приколов помимо этого, например:

public interface IBaseRepository<TEntity, TFilter> {
...
    CompletableFuture<List<TEntity>> getRange(@NotNull TFilter filter);
...
    CompletableFuture<TEntity> getItem(@NotNull Object id);
...
}

Из-за того, что транзакцию прилепить некуда в сущностях нельзя использовать поля с FetchType.LAZY, ну или вообще поля с сущностями использовать нельзя, а только идентификаторы, в следствие чего вылезают какие-то нереальные грабли, например:
- при классическом подходе повторный getItem тащит сущность из памяти, а здесь она каждый раз чистая достается, т.е. если сущность у нас мутирует, то ее придется постоянно по стэку таскать (еще и код более тщательно ревьювить)
- использование идентификаторов в полях сущностей убивает кучу возможностей, предоставляемых Criteria API, в т.ч. статическую типизацию

т.е. получается, что взяли довольно тяжелый ОРМ, у которого есть куча своих проблем, начали его использовать через Ж, и растеряли все его преимущества, которые хоть как-то нивелировали его тяжесть.


Lazy нужно подгружать через @Query(.. JOIN FETCH), тогдо проблем не возникнет, вообще, все связи должны быть LAZY и подгружаться только по необходимости
26 мар 20, 08:46    [22106115]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
PetroNotC Sharp
- ручное em.дайТранзакцию.Старт
нет никакого ручного управления транзакциями - это все фантазии цветочного магазина, транзакциями должен управлять контейнер, а твой код в JTA-окружении будет падать.
26 мар 20, 10:21    [22106156]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
Андрей Панфилов,
Угу. И длинных транзакций не существует.
И десктопа в мире нету.
И без спринга жизни нету.
Не надо так узко на java.
26 мар 20, 11:00    [22106182]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
PetroNotC Sharp
Угу. И длинных транзакций не существует.
И десктопа в мире нету.
И без спринга жизни нету.
Не надо так узко на java.
Мда... чем дальше в лес тем толще партизаны. Длинные транзакции плохи в web - у клиента таймаут, а у нас еще транзакция, а связи между спрингом, JTA и длинными транзакциями нет никакой.
26 мар 20, 12:00    [22106231]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
Андрей Панфилов
Длинные транзакции плохи в web
я знаю. Вы огульно отрицаете ручное управление.
Вы же не сказали "если спринг + если JPA +....
Так как у JPA вообще нет управления транзакциями. Аннотация от спринга.
26 мар 20, 12:14    [22106240]     Ответить | Цитировать Сообщить модератору
 Re: Очень много CompletableFuture  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
Андрей Панфилов,
Вы водителей с ручной коробкой тоже не любите?
26 мар 20, 12:15    [22106241]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Java Ответить