|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
Решил добраться до классики и прочитать книжку Фаулера про архитектуру. Читаю про Реестр(Registry) В книге второй пример про реестр уникальный в рамках потока и в конце вот такой вот код приведён: Код: java 1. 2. 3. 4. 5. 6.
Не могу понять что хотел сказать автор. Как связаны строчки Код: java 1.
и Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 14:06 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
скорее всего ошибка в примере с учетом того, что f1 нигде ниже не используется ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 14:44 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
chpasha, А что должно быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 20:25 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questionerА что должно быть? чую в вопросе какой-то подвох ибо вроде ж очевидно, что либо f1.find(1) либо ThreadLocalRegistry.personFinder().find(1) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 21:38 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questioner, Это точно Фаулер писал? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 17:11 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
maytonЭто точно Фаулер писал? да, можно нагуглить этот кусок ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2019, 17:26 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
В книге сказано, что каждый вызов надо оборачивать в Код: java 1. 2. 3. 4. 5. 6.
А честно я вообще не понял зачем каждый раз ThreadLocalRegistry добавлять и удалять при взаимодействии с ним? P.S. В изначальном примере небольшая неточночность ThreadLocalRegistry.end(); должно быть в finally блоке ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:28 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questionerА честно я вообще не понял зачем каждый раз ThreadLocalRegistry добавлять и удалять при взаимодействии с ним? предположительно в качестве примера экономии ресурсов ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 14:09 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
нашёл список ошибок книги(о_О как их много): 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 для хранения регистра. Сомнительная экономия какая-то ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:12 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questioner Тут вообще получается какая-то фабрика, которая каждый раз создаёт объект и каждый раз мы этот объект ещё и удаляем и ещё и используем ThreadLocal для хранения регистра. Сомнительная экономия какая-то 1) ThreadLocal держит ссылку на персонфайндер и он не может быть собран GC(если поток бесконечно работает в пуле) 2) Так как поток работает в пуле, то он может шариться между разными клиентами, что есть очевидно неправильно. Поэтому был изобретен этот паттерн Код: java 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 12:29 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
забыл ник1) ThreadLocal держит ссылку на персонфайндер и он не может быть собран GC(если поток бесконечно работает в пуле) ThreadLocal содержит ссылку на ThreadLocalRegistry, а тот уже в свою очередь на PersonFinder автор2) Так как поток работает в пуле, то он может шариться между разными клиентами, что есть очевидно неправильно. Поэтому был изобретен этот паттерн А что неправильно в том, что поток работает в пуле? или в том, что он может использоваться разными клиентами? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 13:25 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questionerя так понял суть Registry в том, чтобы мы могли обратиться отовсюду к объекту. Глобальный объект по сути.это ж идея + пример. идею можно модифицировать - в данном случае он решил, что ему для реализации задачи нужны контекст-синглтоны, т.е. экземпляры уникальные только в пределах какого-то контекста/области (в данном случае потока). Как например session scope в spring. questionerчто он может использоваться разными клиентами? предположу, что из-за наличия какого-то внутреннего состояния. возможно коллега еще какие-то моменты имел в виду. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 14:14 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
Чот всё равно не очень понятно. Где-то слышал, что hibernate хранит то ли коннекшн, то ли что в ThreadLocal и это вроде как пример паттерна Registry. Кто-то может подробнее рассказать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 11:42 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questionerThreadLocal и это вроде как пример паттерна Registry этот паттерн не имеет никакого отношения к ThreadLocal, все это уже детали реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 12:06 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questioner, ThreadLocal это сущность мира JDK. Паттерн "Реестр" - более общий. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 12:16 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
chpashaquestionerThreadLocal и это вроде как пример паттерна Registry этот паттерн не имеет никакого отношения к ThreadLocal, все это уже детали реализации.+1 Весь топик высосан из пальца. - приводится пример паттерна с защитой от потоков. А нужно было разобрать сам паттерн. - что такое finder наверняка есть в книге откуда взял код. - убери потоки и разбери паттерн рядом с синглетоном. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 12:21 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
maytonquestioner, ThreadLocal это сущность мира JDK. Паттерн "Реестр" - более общий. Я понимаю это. С другой стороны Registry через ThreadLocal используется в хибернейт. Не 100 процентов, но я почти уверен. На примере из книги не понятно так как суть проблемы не ясна. Вот думаю, если кто-то сможет обьяснить на примере знакомой технологии, то будет понятно. Для чего в хибернейт так сделали и что это дает? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 12:47 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questioner, Свое мнение выскажу. Но чтобы долго не расписывать, тезисно. Шаблон Registry это просто CRUD + Finder-methods (просто DAO). В Spring это аннотация @Registry. Hibernate это просто реализация ORM, но в свое время у их команды была попытка стать нечто большим (скорее даже их жизнь заставила). Нужен не только маппинг, но и какие то задатки контейнера (lookup методы для поиска нужного Registry). Для того чтобы hibernate мог работать без контейнеров (аля Spring). В свое был небольшой срач между членами команд RedHat и Spring. Суть претензии была в том что интеграция spring-hibernate была реализована не по феншую, и что так работать с hibernate как это сделали в spring неверно. На мой взгляд там была некая ревность: Мы реализуем стандарты, а вы своими подходами губите нам весь J2EE. Но пользователи этого не оценили. Вообщем отсутствие IoC контейнера, в тех окружениях где его нет, предполагает добавление каких то костылей, и ThreadLocal (для поиска Registry) это один из вариантов таких костылей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 13:25 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questioner, Ты сам придумал что в хибере это есть и теперь лбом в стену. Обсуждай отдельно. Или потоки или шаблон или хибер. Хибер не потокобезопасен. И гарантируют только межсиссионную изоляцию. Намешал все подряд. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 13:33 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
vas0, vas0Шаблон Registry это просто CRUD + Finder-methods (просто DAO). В Spring это аннотация @Registry. по запросу spring @Registry annotation гугл ничего релевантного не выдаёт ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 13:44 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, фускТы сам придумал что в хибере это есть и теперь лбом в стену. Хибернейт ничего не хранит в ThreadLocal ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 13:52 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questionervas0, vas0Шаблон Registry это просто CRUD + Finder-methods (просто DAO). В Spring это аннотация @Registry. по запросу spring @Registry annotation гугл ничего релевантного не выдаёт Я думаю я тут напутал. Я подумал по коду что раз есть find методы то речь идет про DAO. В спринге это @Repository. Фаулеровкий Registry это наверно другое. Это наверно аналог поиска компонентов в "мифическом контейнере", когда никакого контейнера нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 14:09 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
questionerХибернейт ничего не хранит в ThreadLocal ? он хотел сказать, что ты в первом сообщении признал, что не знаешь, хранит хибер коннекты в threadlocal или нет, но тут же предложил кому-то объяснить, зачем он это делает. во втором - ты заявил, что уже почти на 100% уверен, что хранит. Теперь речь вообще о том, хранит ли Hibernate в ThreadLocal хоть что-нибудь. В threadlocal мы кладем объект либо потому что не можем его сделать потокобезопасным (ну в краткие сроки и чтоб 100% без глюков, вылезающих на 20 процессорах раз в неделю), либо потому что хотим распараллелить его использование. ну например JDBC Connection хоть и потокобезопасен (если по феншую), но имеет при использование одного инстанса параллельно кучу косяков , что лишает его использование совместно всякого смысла. вот тебе возможный вариант почему, ЕСЛИ хибернейт действительно что-то такое делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 14:28 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
chpasha, +1 сумбурные кидания из стороны в сторону без цели. Паттерн, потоки и хибер независимы. Изучай ТС отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 14:42 |
|
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор?
|
|||
---|---|---|---|
#18+
vas0questionervas0, пропущено... по запросу spring @Registry annotation гугл ничего релевантного не выдаёт Я думаю я тут напутал. Я подумал по коду что раз есть find методы то речь идет про DAO. В спринге это @Repository. Фаулеровкий Registry это наверно другое. Это наверно аналог поиска компонентов в "мифическом контейнере", когда никакого контейнера нет. Ну вот да. В потрохах спринга кстати нередко всьречаются и регистры и регистрары ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 14:52 |
|
|
start [/forum/topic.php?fid=59&msg=39867257&tid=2121104]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 244ms |
total: | 387ms |
0 / 0 |