powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Фаулер. UnitOfWork
25 сообщений из 38, страница 1 из 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
25 сообщений из 38, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Фаулер. UnitOfWork
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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