|  | 
| 
Фаулер: паттерн Реестр, уникальный в рамках потока. Что хотел сказать автор? | |||
|---|---|---|---|
| #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&fpage=23&tid=2121104]: | 0ms | 
| get settings: | 11ms | 
| get forum list: | 13ms | 
| check forum access: | 3ms | 
| check topic access: | 3ms | 
| track hit: | 23ms | 
| get topic data: | 10ms | 
| get forum data: | 2ms | 
| get page messages: | 59ms | 
| get tp. blocked users: | 2ms | 
| others: | 235ms | 
| total: | 361ms | 

| 0 / 0 | 
