powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
25 сообщений из 37, страница 1 из 2
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39864621
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил добраться до классики и прочитать книжку Фаулера про архитектуру.

Читаю про Реестр(Registry)

В книге второй пример про реестр уникальный в рамках потока и в конце вот такой вот код приведён:

Код: java
1.
2.
3.
4.
5.
6.
try{
    ThreadLocalRegistry.begin(); //создание ThreadLocalRegistry инстанса и помещение его в ThreadLocal
    PersonFinder f1 = ThreadLocalRegistry.personFinder();
    Person martin = Registry.personFinder().find(1)
    ThreadLocalRegistry.end();//удаление ThreadLocalRegistry инстанса из ThreadLocal
}



Не могу понять что хотел сказать автор.
Как связаны строчки
Код: java
1.
PersonFinder f1 = ThreadLocalRegistry.personFinder();


и
Код: java
1.
Person martin = Registry.personFinder().find(1)
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39864659
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего ошибка в примере с учетом того, что f1 нигде ниже не используется
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39864847
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpasha,

А что должно быть?
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39864862
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerА что должно быть?
чую в вопросе какой-то подвох ибо вроде ж очевидно, что либо f1.find(1) либо ThreadLocalRegistry.personFinder().find(1)
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39865056
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Это точно Фаулер писал?
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39865058
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто точно Фаулер писал?
да, можно нагуглить этот кусок
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39865603
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В книге сказано, что каждый вызов надо оборачивать в
Код: java
1.
2.
3.
4.
5.
6.
try{
    ThreadLocalRegistry.begin(); //создание ThreadLocalRegistry инстанса и помещение его в ThreadLocal
    ...
}  finally{
   ThreadLocalRegistry.end();//удаление ThreadLocalRegistry инстанса из ThreadLocal
}


А честно я вообще не понял зачем каждый раз ThreadLocalRegistry добавлять и удалять при взаимодействии с ним?


P.S. В изначальном примере небольшая неточночность ThreadLocalRegistry.end(); должно быть в finally блоке
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39865636
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerА честно я вообще не понял зачем каждый раз ThreadLocalRegistry добавлять и удалять при взаимодействии с ним?
предположительно в качестве примера экономии ресурсов
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39866179
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашёл список ошибок книги(о_О как их много):
https://www.martinfowler.com/eaaErrata.htm

авторPage 485: In the last code example the line Person martin = Registry.personFinder().find(1); should read Person martin = f1.find(1); [Corrected in the 10th printing]

chpashaпредположительно в качестве примера экономии ресурсов


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

Тут вообще получается какая-то фабрика, которая каждый раз создаёт объект и каждый раз мы этот объект ещё и удаляем и ещё и используем ThreadLocal для хранения регистра. Сомнительная экономия какая-то
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39866203
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Тут вообще получается какая-то фабрика, которая каждый раз создаёт объект и каждый раз мы этот объект ещё и удаляем и ещё и используем ThreadLocal для хранения регистра. Сомнительная экономия какая-то

1) ThreadLocal держит ссылку на персонфайндер и он не может быть собран GC(если поток бесконечно работает в пуле)
2) Так как поток работает в пуле, то он может шариться между разными клиентами, что есть очевидно неправильно. Поэтому был изобретен этот паттерн

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
----> request started
----> get thread from pool
val a = getFromThreadLocal
method1() ---> use a inside
method2() ---> use a inside
method3() ---> use a inside
cleanThreadLocal
----> return to the pool
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39866281
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник1) ThreadLocal держит ссылку на персонфайндер и он не может быть собран GC(если поток бесконечно работает в пуле)


ThreadLocal содержит ссылку на ThreadLocalRegistry, а тот уже в свою очередь на PersonFinder

автор2) Так как поток работает в пуле, то он может шариться между разными клиентами, что есть очевидно неправильно. Поэтому был изобретен этот паттерн


А что неправильно в том, что поток работает в пуле? или в том, что он может использоваться разными клиентами?
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39866331
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerя так понял суть Registry в том, чтобы мы могли обратиться отовсюду к объекту. Глобальный объект по сути.это ж идея + пример. идею можно модифицировать - в данном случае он решил, что ему для реализации задачи нужны контекст-синглтоны, т.е. экземпляры уникальные только в пределах какого-то контекста/области (в данном случае потока). Как например session scope в spring.

questionerчто он может использоваться разными клиентами?
предположу, что из-за наличия какого-то внутреннего состояния. возможно коллега еще какие-то моменты имел в виду.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867238
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чот всё равно не очень понятно.

Где-то слышал, что hibernate хранит то ли коннекшн, то ли что в ThreadLocal и это вроде как пример паттерна Registry.
Кто-то может подробнее рассказать?
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867245
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerThreadLocal и это вроде как пример паттерна Registry
этот паттерн не имеет никакого отношения к ThreadLocal, все это уже детали реализации.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867252
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner, ThreadLocal это сущность мира JDK. Паттерн "Реестр" - более общий.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867257
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaquestionerThreadLocal и это вроде как пример паттерна Registry
этот паттерн не имеет никакого отношения к ThreadLocal, все это уже детали реализации.+1
Весь топик высосан из пальца.
- приводится пример паттерна с защитой от потоков. А нужно было разобрать сам паттерн.
- что такое finder наверняка есть в книге откуда взял код.
- убери потоки и разбери паттерн рядом с синглетоном.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867271
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonquestioner, ThreadLocal это сущность мира JDK. Паттерн "Реестр" - более общий.

Я понимаю это. С другой стороны Registry через ThreadLocal используется в хибернейт. Не 100 процентов, но я почти уверен. На примере из книги не понятно так как суть проблемы не ясна. Вот думаю, если кто-то сможет обьяснить на примере знакомой технологии, то будет понятно. Для чего в хибернейт так сделали и что это дает?
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867293
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

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

Шаблон Registry это просто CRUD + Finder-methods (просто DAO). В Spring это аннотация @Registry.

Hibernate это просто реализация ORM, но в свое время у их команды была попытка стать нечто большим (скорее даже их жизнь заставила). Нужен не только маппинг, но и какие то задатки контейнера (lookup методы для поиска нужного Registry). Для того чтобы hibernate мог работать без контейнеров (аля Spring). В свое был небольшой срач между членами команд RedHat и Spring. Суть претензии была в том что интеграция spring-hibernate была реализована не по феншую, и что так работать с hibernate как это сделали в spring неверно. На мой взгляд там была некая ревность: Мы реализуем стандарты, а вы своими подходами губите нам весь J2EE. Но пользователи этого не оценили.

Вообщем отсутствие IoC контейнера, в тех окружениях где его нет, предполагает добавление каких то костылей, и ThreadLocal (для поиска Registry) это один из вариантов таких костылей.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867297
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Ты сам придумал что в хибере это есть и теперь лбом в стену.
Обсуждай отдельно. Или потоки или шаблон или хибер.
Хибер не потокобезопасен. И гарантируют только межсиссионную изоляцию.
Намешал все подряд.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867301
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0,

vas0Шаблон Registry это просто CRUD + Finder-methods (просто DAO). В Spring это аннотация @Registry.


по запросу spring @Registry annotation гугл ничего релевантного не выдаёт
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867305
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

фускТы сам придумал что в хибере это есть и теперь лбом в стену.

Хибернейт ничего не хранит в ThreadLocal ?
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867320
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionervas0,

vas0Шаблон Registry это просто CRUD + Finder-methods (просто DAO). В Spring это аннотация @Registry.


по запросу spring @Registry annotation гугл ничего релевантного не выдаёт Я думаю я тут напутал. Я подумал по коду что раз есть find методы то речь идет про DAO. В спринге это @Repository.

Фаулеровкий Registry это наверно другое. Это наверно аналог поиска компонентов в "мифическом контейнере", когда никакого контейнера нет.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867331
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerХибернейт ничего не хранит в ThreadLocal ?
он хотел сказать, что ты в первом сообщении признал, что не знаешь, хранит хибер коннекты в threadlocal или нет, но тут же предложил кому-то объяснить, зачем он это делает. во втором - ты заявил, что уже почти на 100% уверен, что хранит. Теперь речь вообще о том, хранит ли Hibernate в ThreadLocal хоть что-нибудь. В threadlocal мы кладем объект либо потому что не можем его сделать потокобезопасным (ну в краткие сроки и чтоб 100% без глюков, вылезающих на 20 процессорах раз в неделю), либо потому что хотим распараллелить его использование. ну например JDBC Connection хоть и потокобезопасен (если по феншую), но имеет при использование одного инстанса параллельно кучу косяков , что лишает его использование совместно всякого смысла. вот тебе возможный вариант почему, ЕСЛИ хибернейт действительно что-то такое делает.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867344
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
+1 сумбурные кидания из стороны в сторону без цели.
Паттерн, потоки и хибер независимы. Изучай ТС отдельно.
...
Рейтинг: 0 / 0
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
    #39867352
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0questionervas0,

пропущено...


по запросу spring @Registry annotation гугл ничего релевантного не выдаёт Я думаю я тут напутал. Я подумал по коду что раз есть find методы то речь идет про DAO. В спринге это @Repository.

Фаулеровкий Registry это наверно другое. Это наверно аналог поиска компонентов в "мифическом контейнере", когда никакого контейнера нет.

Ну вот да. В потрохах спринга кстати нередко всьречаются и регистры и регистрары
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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