powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Фаулер. UnitOfWork
38 сообщений из 38, показаны все 2 страниц
Фаулер. UnitOfWork
    #39871351
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрался до UnitOfWork.
Понятно, что этот паттерн для того чтобы избежать лишних обращений к базе. Когда транзакция закончилась тогда подсчитали изменения и записали их. тут всё вроде понятно.

Что не понятно:

1. сколько инстансов объекта UnitOfWork нужно?

В одном примере его имплементация выглядит как:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class UnitOfWork ....

    private List newObjects = new ArrayList();
    private List dirtyObjects = new ArrayList();
    private List removedObjects = new ArrayList();


    public void registerNew(DomainObject o){...}
    public void registerDirty(DomainObject o){...}
    public void registerRemoved(DomainObject o){...}
    public void registerClean(DomainObject o){...}



создаётся впечатление, что это какой-то глобальный объект

В другом примере вот такой код(с примером реестра в ThreadLocal):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class UnitOfWorkServlet ...
   final protected void doGet(HttpServletRequest request,HttpServletResponse response){
      try{
         UnitOfWork.newCurrent(); // create UnitOfWorkInstance in ThreadLocal
         handleGet(request, response);
         UnitOfWork.getCurrent().commit() 
      } finally(){
         UnitOfWork.setCurrent(null) //threadLocalInstance.set(null)
      }
   }



Тут на каждый запрос UnitOfWor заново создаётся.



2. Также автор пишет, что этот паттерн как-то решать проблемы параллелизма. Вот я не понимаю как она решается.

Вот есть у нас 2 конкурентных запроса, которые одного юзера изменяют. Что будет происходить? как этот паттерн поможет решить проблему?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871365
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он не решит эту проблему. Просто все изменения запишутся в одном месте, транзакционно. Кто первый встал того и тапки. Нужно понимать что книга писалась, когда @transactional только появлялся.
Далее, хибернейт со своим первым уровнем кэша классический образец unit of work.
Вопрос про инстансы некорректный, на каждый реквест свой юнит оф ворк
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871383
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

А зачем ThreadLocal в последнем примере?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871401
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerзабыл ник,

А зачем ThreadLocal в последнем примере?
Ну вспомни что ты спрашивал в прошлой теме про хибернейт и тредлокал в прошлой теме.


Поинт юнит оф вопк в том что он либо весь пройдет, либо ничего. В отсутствии его у тебя в базе может очутиться все что угодно
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871403
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

JPA PersistenceContext это реализация Фаулеровского UnitOfWork. По сути эта три коллекции объектов: добавленные, измененные, удаленные.

Синхронизация состояния PersistenceContext с базой данных происходит в трех случаях (по моему):
1. Commit транзакции
2. Перед выполнением запросов
3. Session.flush (или аналог в JPA)
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871526
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никНу вспомни что ты спрашивал в прошлой теме про хибернейт и тредлокал в прошлой теме.


Так по такой логике надо любой несинхронизованный объект класть в ThreadLocal. мы ж не кладём любой ArrayList в ThreadLocal.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871640
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник
Поинт юнит оф вопк в том что он либо весь пройдет, либо ничего. В отсутствии его у тебя в базе может очутиться все что угодно

Такого кстати никто кроме Вас не пишет. Ну и самое главное, что Фаулер такого не пишет.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871685
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот есть у нас Client и Order и они связаны.

Для Client и для Order будут разные UnitOfWork или одна и та же?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871703
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner1. сколько инстансов объекта UnitOfWork нужно?
я не понял, почему тебя интересует теория и не интересует РЕАЛИЗАЦИЯ?
1. Есть паттерн.
2. Где он реализован?
Ответ - Готовые решения из различных ORM - NHibernate (Session), Linq2Sql (DataContext) , Entity Framework (ObjectContext), LLBLGen (UnitOfWork) и т.д.
...
Значит учи реализацию в хибере.
questioner2. Также автор пишет, что этот паттерн как-то решать проблемы параллелизма. Вот я не понимаю как она решается.
Изучай в реализации. Без этого невозможно. Увы(.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871711
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharpquestioner1. сколько инстансов объекта UnitOfWork нужно?
я не понял, почему тебя интересует теория и не интересует РЕАЛИЗАЦИЯ?
1. Есть паттерн.
2. Где он реализован?
Ответ - Готовые решения из различных ORM - NHibernate (Session), Linq2Sql (DataContext) , Entity Framework (ObjectContext), LLBLGen (UnitOfWork) и т.д.
...


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

по списку готовых решений ты палишься, "джавист")



PetroNotC Sharpquestioner2. Также автор пишет, что этот паттерн как-то решать проблемы параллелизма. Вот я не понимаю как она решается.
Изучай в реализации. Без этого невозможно. Увы(.

ты хотел сказать, что ты не знаешь?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871714
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerВот есть у нас Client и Order и они связаны.

Для Client и для Order будут разные UnitOfWork или одна и та же?Подход JPA (и hibernate) отличается от JDBC. В JDBC ты выполняешь запрос и идет обращение к БД.

В JPA PersistenceContext (Hibernate Session) это абстракция его еще называют кэш первого уровня.

Например у тебя есть строка в БД, ты получил запросом java объект в памяти.

Person person = session.find(1L);
person.setName("Updated name");

после вызова setter, состояние твоего объекта не соответствует тому что в БД. Поэтому состояние кеша первого уровня должно быть синхронизовано с БД. За это как раз этот кэш и отвечает. Для всех измененных в кэше объектов будет вызван sql update, для удаленных sql delete, для новых объектов sql insert.

Объекты в этом кэше могут быть любые (Client, Order и т.п.) Это определяется границами твоей бизнес транзакции.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871716
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЯ читаю общепризнанную книгу, пытаюсь переварить. там по идее должны быть максимально краткие и понятные примеры. Автор предполагает, что их должно быть достаточно, но мне не достаточно) поэтому задаю вопросы.
Дак ты хоть 200 раз повтори что ты изучаешь книгу по программированию без программирования.
Толку то?

questionerты хотел сказать, что ты не знаешь?
я изучал хибер в иклипсе)))
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871718
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerпо списку готовых решений ты палишься, "джавист")ты решил что я EF не изучал? Или что паттерн относится только к Java?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871719
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharpя изучал хибер в иклипсе)))

Вижу, что отложилось много

PetroNotC Sharpты решил что я EF не изучал? Или что паттерн относится только к Java?


English First ?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871720
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0questionerВот есть у нас Client и Order и они связаны.

Для Client и для Order будут разные UnitOfWork или одна и та же?Подход JPA (и hibernate) отличается от JDBC. В JDBC ты выполняешь запрос и идет обращение к БД.

В JPA PersistenceContext (Hibernate Session) это абстракция его еще называют кэш первого уровня.

Например у тебя есть строка в БД, ты получил запросом java объект в памяти.

Person person = session.find(1L);
person.setName("Updated name");

после вызова setter, состояние твоего объекта не соответствует тому что в БД. Поэтому состояние кеша первого уровня должно быть синхронизовано с БД. За это как раз этот кэш и отвечает. Для всех измененных в кэше объектов будет вызван sql update, для удаленных sql delete, для новых объектов sql insert.

Объекты в этом кэше могут быть любые (Client, Order и т.п.) Это определяется границами твоей бизнес транзакции.

Ок, нам пришло 2 параллельных запроса на на обновление ордеров юзера.

на каждый запрос создали по UnitOfWork - то есть 2 инстанса. В каждом инстансе трекаем изменения своего запроса для обоих объектов. Так?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871722
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerВижу, что отложилось много
у тебя без практики вообще ничего не откладывается. Увы.
Называй реализации паттерна. Что замолчл?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871724
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC SharpquestionerВижу, что отложилось много
у тебя без практики вообще ничего не откладывается. Увы.
Называй реализации паттерна. Что замолчл?

Избавь меня от своего внимания. я его не достоин.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871725
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerОк, нам пришло 2 параллельных запроса на на обновление ордеров юзера.
в разных сессиях хибера дорогой
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871726
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerИзбавь меня от своего внимания. я его не достоин.не задавай вопросы джуна без кода
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871727
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC SharpquestionerИзбавь меня от своего внимания. я его не достоин.не задавай вопросы джуна без кода

джун у тебя между ног
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871733
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerОк, нам пришло 2 параллельных запроса на на обновление ордеров юзера.

на каждый запрос создали по UnitOfWork - то есть 2 инстанса. В каждом инстансе трекаем изменения своего запроса для обоих объектов. Так? Сложно обсуждать абстрактные примеры. Если у тебя две разные транзакции, то у каждой будет своя session (свой кэш), и свои экземпляры (java объекты в памяти).

Если в БД это одна и та же запись, то тут уже нужно использовать optimistic\pessimistic lock. Либо в многопользовательской среде данные одного из обновлений можно потерять.

Это у тебя будет одна из следующих глав Фаулера.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871759
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0questionerОк, нам пришло 2 параллельных запроса на на обновление ордеров юзера.

на каждый запрос создали по UnitOfWork - то есть 2 инстанса. В каждом инстансе трекаем изменения своего запроса для обоих объектов. Так? Сложно обсуждать абстрактные примеры. Если у тебя две разные транзакции, то у каждой будет своя session (свой кэш), и свои экземпляры (java объекты в памяти).

Если в БД это одна и та же запись, то тут уже нужно использовать optimistic\pessimistic lock. Либо в многопользовательской среде данные одного из обновлений можно потерять.

Это у тебя будет одна из следующих глав Фаулера.

Мистер Фаулер именно так и делает.

Тогда вообще не понятно как этот паттерн помогает решать проблемы конкурентности
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871760
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тебе уже написал. Он решает в смысле "либо все либо ничего" и никаких промежуточных состояний. Какое ты решение еще себе представляешь?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871763
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerМистер Фаулер именно так и делает.

Тогда вообще не понятно как этот паттерн помогает решать проблемы конкурентности Думаю этот паттерн в конкурентности никак не помогает. Это кэш цель которого уменьшить или отложить выполнение sql запросов к БД, с другой стороны тут возможна оптимизация bulk update. Ну и в конкретных реализациях предотвратить появления в памяти множества java объектов которые соответствуют одной и той же записи в БД.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871774
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никЯ тебе уже написал. Он решает в смысле "либо все либо ничего" и никаких промежуточных состояний. Какое ты решение еще себе представляешь?

Фаулер вообще ничего такого не упоминает. гугл ничего такого не выдаёт тоже. Поэтому я думаю, что Ваше понимание неверно.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871775
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0questionerМистер Фаулер именно так и делает.

Тогда вообще не понятно как этот паттерн помогает решать проблемы конкурентности Думаю этот паттерн в конкурентности никак не помогает. Это кэш цель которого уменьшить или отложить выполнение sql запросов к БД, с другой стороны тут возможна оптимизация bulk update. Ну и в конкретных реализациях предотвратить появления в памяти множества java объектов которые соответствуют одной и той же записи в БД.
Ну вот ради оптимизации запросов к базе этот патерн и есть, чтобы не обновлять одно поле, потом второе, потом опять первое, а сделать это один раз. Это как-бы очевидно. Но в определении написано, что он как-то помогает решать проблемы конкурентности.


про объекты в памяти это уже похоже Identity Map паттерн
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871777
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerзабыл никЯ тебе уже написал. Он решает в смысле "либо все либо ничего" и никаких промежуточных состояний. Какое ты решение еще себе представляешь?

Фаулер вообще ничего такого не упоминает. гугл ничего такого не выдаёт тоже. Поэтому я думаю, что Ваше понимание неверно. У Фаулера такого не написано, так как его шаблоны "простые". Но "забыл ник" правильно написал про ошибки. О чем может говорить ошибка? О том что состояние кэша больше не соответствует состоянию в БД, в этом случае все состояние кэша сбрасывается как невалидное, все изменения в этом кэше теперь просто мусор.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871778
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerон как-то помогает решать проблемы конкурентности.в части изолирования одного запроса(сессии\потока) от другого.
Так как списки разные, и в памяти объекты разные.
Вы читаете что вам пишут выше?
vas0, то у каждой будет своя session (свой кэш), и свои экземпляры (java объекты в памяти).
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871782
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0У Фаулера такого не написано, так как его шаблоны "простые".конечно.
У него своя реализация шаблона
- список.ДобавитьУдаление
- список.Коммит
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871784
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpУ него своя реализация шаблонащас ТС напишет что такого текста нет ни в гугле ни у самого Фаулера значит мы не правы.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871797
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharpquestionerон как-то помогает решать проблемы конкурентности.в части изолирования одного запроса(сессии\потока) от другого.
Так как списки разные, и в памяти объекты разные.
vas0, то у каждой будет своя session (свой кэш), и свои экземпляры (java объекты в памяти).

ну если только так. ок. Хоть как-то это можно притянуть на основе контента книги.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871798
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0questionerпропущено...


Фаулер вообще ничего такого не упоминает. гугл ничего такого не выдаёт тоже. Поэтому я думаю, что Ваше понимание неверно. У Фаулера такого не написано, так как его шаблоны "простые". Но "забыл ник" правильно написал про ошибки. О чем может говорить ошибка? О том что состояние кэша больше не соответствует состоянию в БД, в этом случае все состояние кэша сбрасывается как невалидное, все изменения в этом кэше теперь просто мусор.

Какие ошибки? кто писал? выше чего?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871803
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionervas0пропущено...
У Фаулера такого не написано, так как его шаблоны "простые". Но "забыл ник" правильно написал про ошибки. О чем может говорить ошибка? О том что состояние кэша больше не соответствует состоянию в БД, в этом случае все состояние кэша сбрасывается как невалидное, все изменения в этом кэше теперь просто мусор.

Какие ошибки? кто писал? выше чего? Если при выполнении синхронизации состояния UnitOfWork с БД происходит ошибка, то какие варианты действия у нас есть? Обычно действие только одно все откатить.
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871831
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0questionerпропущено...


Какие ошибки? кто писал? выше чего? Если при выполнении синхронизации состояния UnitOfWork с БД происходит ошибка, то какие варианты действия у нас есть? Обычно действие только одно все откатить.

а зачем её синхронизировать? ну конкретно в рамках этого паттерна.

Судя по всему то о чем Вы спрашиваете идёт уже в рамках Pessimistic/Optimistic offline lock
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871835
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerа зачем её синхронизировать? ну конкретно в рамках этого паттерна.А что делает по вашему метод коммит у фаулера?
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871836
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerСудя по всему то о чем Вы спрашиваете идёт уже в рамках Pessimistic/Optimistic offline lockв след.топик и главу)
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871842
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharpquestionerа зачем её синхронизировать? ну конкретно в рамках этого паттерна.А что делает по вашему метод коммит у фаулера?

приведу цитату из книги:

Фаулеркогда Вы решаете зафиксировать сделанные изменения, единица работы определяет, что ей нужно сделать. Она сама открывает транзакцию, выполняет всю необходимую проверку на наличие параллельных операций(с помощью Pessimistic Offline Lock(445 стр.) или Pessimistic Offline Lock(стр. 434) и записывает изменения в базу данных
...
Рейтинг: 0 / 0
Фаулер. UnitOfWork
    #39871844
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerPetroNotC Sharpпропущено...
А что делает по вашему метод коммит у фаулера?

приведу цитату из книги:

Фаулеркогда Вы решаете зафиксировать сделанные изменения, единица работы определяет, что ей нужно сделать. Она сама открывает транзакцию, выполняет всю необходимую проверку на наличие параллельных операций(с помощью Pessimistic Offline Lock(445 стр.) или Pessimistic Offline Lock(стр. 434) и записывает изменения в базу данныхзамечательно.
"зафиксировать изменения" это синхронизировать?
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Фаулер. UnitOfWork
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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