
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
30.10.2007, 07:36:19
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Услышал такие мнения в одном из топиков, где мусолили EJB vs Spring. Интересует целесообразность использования модели: SessionFactory injected in DAO. Ведь, в случае, если понадобится получить доступ к базе из, например, POJO класса, получится облом. В случае же ThreadLocal session (HibernateUtil.currentSession() ), можно вызывать код доступа к БД из любого места: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Рассмотрим Spring HibernateTemplate, что он делает: 1. Открывает Hibernate session 2. Что-то делает 3. Закрывает Hibernate session Далее(в моем случае) результат передается на View layer (jsp). Ежели в JSP нужно подгрузить коллекцию lazy-методом или many-to-one, будет облом, т.к. сессия уже закрыта. Вобщем пока не нахожу для себя перичин не использовать подход HibernateUtil.currentSession(). Что скажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 09:00:37
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Alexey TurnВобщем пока не нахожу для себя перичин не использовать подход HibernateUtil.currentSession(). Что скажете? Если не находишь то скорее всего их нет :) Alexey Turn Ежели в JSP нужно подгрузить коллекцию lazy-методом или many-to-one, будет облом, т.к. сессия уже закрыта. А для этого есть "Open Session in View", в спринге через фильтр или интерцепрор (OpenSessionInViewFilte, OpenSessionInViewInterceptor). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 09:10:43
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Alexey TurnВ случае же ThreadLocal session (HibernateUtil.currentSession() ), можно вызывать код доступа к БД из любого места: А вообще странный подход пихать код доступа к БД в "любое место". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 09:58:41
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
vas0 Alexey TurnВ случае же ThreadLocal session (HibernateUtil.currentSession() ), можно вызывать код доступа к БД из любого места: А вообще странный подход пихать код доступа к БД в "любое место". А чем плох такой подход? Есть два подхода: 1. Когда все должно лежать в своем слое. 2. Когда все скрыто внутри объектов. 3. Смешанный подход. На мой взгляд, смешанный подход гибче. Т.е. если Вы делайте запрос к бд всего один раз, то, возможно не стоит заморачиваться вшиванием его в DAO объект... Если вы делаете этот же запрос в другом месте, то, пожалуй стоит задуматься, будет ли ситуация, в которой нужно будет его третье использование. И только в случае утвердительного ответа, имхо, стоит пихать код доступа к БД в DAO, а DAO, в свою очередь вшивать в нужный слой (Юзаю Spring). Иначе все эти телодвижения не окупаются. 2. Вытянули вы из сессии POJO объект Client, допустим. Желаем пофетчить друзей клиента, которые входят в партию "Любителей пива". Код: plaintext 1. 2. 3. 4. 5. 6. 7. У нас уже есть информация о клиенте - его Id. Вызов выглядит более естественным. В случае сервиса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Выглядит менее естественно, но более упорядочено из-за структуры пирога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 12:38:40
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
1. в entity передаются репозитории (через интерфейсы), этим обеспечивается независимость от хибера (lightweight) см. POJO in Action 2. "Open Session in View" имхо слабый паттерн 3. при использовании HibUtil теряете лёгкие юнит тесты, переконфигурацию на разные SF. как правило в HiberUtil написан ужос. 4. не стоит забывать отличия DAO и Repository 5. JTA транзакции рулят 6. fetching it's a facade's concern ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 12:47:38
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Все варианты работы имеют право на существование, многое здесь зависит от контекста. И говорить что есть единственно правильный вариант работы будет глупо. Но возможность встретить в любом pojo вот такой код, меня пугает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. По теории приятней видеть что то типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 13:23:48
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Alexey TurnУслышал такие мнения в одном из топиков, где мусолили EJB vs Spring. В случае же ThreadLocal session (HibernateUtil.currentSession() ), можно вызывать код доступа к БД из любого места: Что скажете? У вас правильный вопрос, но совершенно не логичные обоснования. Есть такие люди - авторы Hibernate, так вот они полностью отрицают целесообразность использования Spring HibernateTemplate. И при каждом удобном случае пытаются пнуть Spring. Вот у них вам стоит поучится, у них более разумные обоснования по поводу чем использование HibernateTemplate хуже. Если сами не найдете - могу подкинуть ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 14:17:34
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
BlazkowiczЕсть такие люди - авторы Hibernate, так вот они полностью отрицают целесообразность использования Spring HibernateTemplate. И при каждом удобном случае пытаются пнуть Spring. ... у них более разумные обоснования по поводу чем использование HibernateTemplate хуже..... сцылца? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 14:21:54
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
expp 1. в entity передаются репозитории (через интерфейсы), этим обеспечивается независимость от хибера (lightweight) см. POJO in Action 2. "Open Session in View" имхо слабый паттерн 3. при использовании HibUtil теряете лёгкие юнит тесты, переконфигурацию на разные SF. как правило в HiberUtil написан ужос. 4. не стоит забывать отличия DAO и Repository 5. JTA транзакции рулят 6. fetching it's a facade's concern 1. Скачал POJO in Action, надеюсь в нем есть определения словам: репозитории через интерфейсы. 2. Чем слабый? 3. Хмм.. мне казалось, что HibernateUtil как раз таки дает использовать легкие юнит-тесты без поднятия части контейнера Spring. Для переконфигурации на разные SF можно еще написать сколько нужно HibernateUtil-ов, на каждую SF. Ну ужос. Но не ужос ужос ужос (c) Что вы имеете под словом ужос? Это ужос? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 4. Про Repository почитаю. Жаль, не знаю что это такое... 5. Чем JTA рулящие транзакции отличаются(лучше,рульнее) от Код: plaintext 1. 2. 6. Сообщил модератору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 14:30:48
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
vas0Все варианты работы имеют право на существование, многое здесь зависит от контекста. И говорить что есть единственно правильный вариант работы будет глупо. Но возможность встретить в любом pojo вот такой код, меня пугает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. По теории приятней видеть что то типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. В теории может и хорошо. На практике: Что делать, когда нужно одновременно вытащить из базы данные, относящиеся не только к Person, но и цвет шерсти его любимой собаки Dog Как сие действие укладывается в такую теорию? С Open Session in View вроде разобрались, но его ругают выше слабым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 15:15:04
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Alexey TurnЧто делать, когда нужно одновременно вытащить из базы данные, относящиеся не только к Person, но и цвет шерсти его любимой собаки Dog Как сие действие укладывается в такую теорию? "Вот это - вопрос! Вы же меня наповал убиваете этим вопросом!" (с) Груздев А плохо вписывается в эту теорию и здесь начинают изращаться, кто на что горазд. Вариант 1. Замапить так, чтобы сразу нужные объекты поднимать, либо вариации на тему Open Session In View. Вариант 2. Добавление специального метода в PersonDao Код: plaintext 1. 2. 3. 4. Вариант 3. Добавление специального метода в DogDao Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 15:37:48
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
expp BlazkowiczЕсть такие люди - авторы Hibernate, так вот они полностью отрицают целесообразность использования Spring HibernateTemplate. И при каждом удобном случае пытаются пнуть Spring. ... у них более разумные обоснования по поводу чем использование HibernateTemplate хуже..... сцылца? Отсюда , но как я вижу часть содержимого по ссылокам про всякие терки Hibernate vs Spring уже потерли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 15:45:28
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Alexey Turn4. Про Repository почитаю. Жаль, не знаю что это такое... Анти-паттерн такой Alexey Turn5. Чем JTA рулящие транзакции отличаются(лучше,рульнее) от Тут сразу 2 скрытых вопроса. 1) Чем JTA лучше транзакций БД Достаточно спеку почитать, чтобы разобратся. Взять хотя бы propagation, распределенные транзакции и возможность вкладывать в транзакцию не только работу с БД. 2) Чем декларативное управление транзакциями лучше явного. Так это же тоже просто. - Уменьшение и упрощение кода заменой явных вызовов на декларативность. - Возможность оборачивать в транзакции любые бизнес-методы, запросы к слою бизнес-уровня не делая сам бизнес слой зависимым от БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 15:57:44
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Alexey Turn 2. Чем слабый? когда вам нужно закончить транзакцию и взависимости от оспеха или отката отрендерить нужный view. Alexey Turn 3. ...переконфигурации на разные SF можно еще написать сколько нужно HibernateUtil-ов, на каждую SF. имхо для этого и xml конфиг и нужен, чтоб не"писать сколько нужно HibernateUtil-ов, на каждую" Код: plaintext 1. она может привязываться jta. Создание SF imho удобнее через spring конфигурацию Alexey Turn5. Чем JTA рулящие транзакции отличаются(лучше,рульнее) от даж не знаю. принято использльзовать. недостатков не замеченно Alexey Turn6. Сообщил модератору. футко? или перевести ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 16:24:04
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Blazkowicz Отсюда , но нерелевантно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 19:05:24
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
1. Расскажите пожалуйста про JTA. авторДостаточно спеку почитать, чтобы разобратся. Взять хотя бы propagation, распределенные транзакции и возможность вкладывать в транзакцию не только работу с БД. Ссылочку на спеку, если не сложно? Очень, очень интересно, как это - вкладывать в транзакцию не только работу с БД (Не реализовывая откат самому). class CatSaver{ void save(Cat cat) { ImageResizer.resize(cat.getPhotoGrivo(),"C://cat.jpg"); ImageResizer.resize(cat.getPhotoHvost(),"C://cat.jpg"); HibernateUtil.currentSession().save(cat); } } Метод CatSaver.save() совершает два действия: 1. Записывает фотки кота на диск. 2. Сохраняет кота в базе. Предположим база добра не дает. Как JTA откатит изменения? Что-то нереальное... Я бы поместил Все это добро в блок try и catch и в случае Exception написал бы код отката. Правильно? Относительно распределенных вобще хрен поймешь... 2. Декларативные транзакции - красиво. В Spring они реализованы через RTTI, и есть подозрения, что будут тормозить все эти перехваты. Как в реальном приложении? 3. Ежели из базы приложение тянет результаты хранимой процедуры и схожие с ними(например SelectTableOfClientsWhoPaydZaGazAndOrganizationsWhoNoPaydZaSvetAndDolgnikoff), какой шаблон проектирования лучше пользовать? 4. Чем дальше бизнес-логика от базы данных тем тормазнутее приложение. Согласны? 5. Читал про репозиторий Вот пример со Spring. Правильно ли я воспроизвел его в этом примере? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 6. Чем плохо зависимость бизнес слоя от БД? (Кслову, думаю, что Ораклисты скажут противоположеное...). Напротив, БД следит за целостностью данных и ругнется, ежели чего вы с бизнес слоем напутаете. 7. Модератор так и не принял меры на: fetching it's a facade's concern =) переведите плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.10.2007, 12:58:34
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Alexey Turn1. Расскажите пожалуйста про JTA. Ссылочку на спеку, если не сложно? Гугл подаст. Alexey Turn2. Декларативные транзакции - красиво. В Spring они реализованы через RTTI, и есть подозрения, что будут тормозить все эти перехваты. Как в реальном приложении? Это все дурацкие мифы. Тормоза приложений практически никогда не связаны с reflection или использованием разнообразных проксей. Основные причины тормозов - это взаимные блокировки, лишние циклы обращений к медленным внешним сервисам(таким как база) и использование не продуманных решений, которые на одну бизнес операцию требуют серьезных затрат CPU (например парсинг XML запросов). Alexey Turn4. Чем дальше бизнес-логика от базы данных тем тормазнутее приложение. Согласны? "Дальше" в каком плане? В километрах сети? Alexey Turn6. Чем плохо зависимость бизнес слоя от БД? (Кслову, думаю, что Ораклисты скажут противоположеное...). Например, сложностью юнит тестирования. Хотя это все субъективно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.10.2007, 15:20:16
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Alexey Turn1. Расскажите пожалуйста про JTA. да я как бы не эксперт. проще самому почитать. авторДостаточно спеку почитать, чтобы разобратся. Взять хотя бы propagation, распределенные транзакции и возможность вкладывать в транзакцию не только работу с БД. jta wiki ejb-tx автор Очень, очень интересно, как это - вкладывать в транзакцию не только работу с БД (Не реализовывая откат самому).... в JTA(S) никакой магии не. если ресурсный менеджер реализует JTS то координатор может им управлять и делать откат .. и т.д. автор Относительно распределенных вобще хрен поймешь... несколько баз (ресурсных менеджеров) как правило кроме баз дёргают: JMS, TreeCache, BerkleyDB автор 2. Декларативные транзакции - красиво. В Spring они реализованы через RTTI, и есть подозрения, что будут тормозить все эти перехваты. Как в реальном приложении? я не уверен про РТТИ, но и spiring и ejb (касательно транзакций) это тош самое - aop. на скорость никто не жаловался. (кроме build-time ejb гы ыгы г) авторнапример SelectTableOfClientsWhoPaydZaGazAndOrganizationsWhoNoPaydZaSvetAndDolgnikoff), какой шаблон проектирования лучше пользовать? выглядит как обычный репозиторный метод. как правило SP плохо сочетаются DDD автор 4. Чем дальше бизнес-логика от базы данных тем тормазнутее приложение. Согласны? несущественно: трёхзвенко с дддой рулят. имхо споки и триггеры старшнее автор Вот пример со Spring. Правильно ли я воспроизвел его в этом примере? ну похоже вроде но: " this.getRepository ().load(this....);" оооочень странно. обычно бывает: add/remove/findXXX вызов репозитория из сущности используется сравнительно редко. иметь ссылцу на репозиторий из сущности - не оч хор идея. чаще репозитории (или регистры с ними) передают в метод сущности как параметр. авторНапротив, БД следит за целостностью данных и ругнется, ежели чего вы с бизнес слоем напутаете. обычно или бд слишком тупа, чтоб осилить всю логику. либо наоборот имеет слишком мощный язык (орасл) об который можно моск сломать. поэтому база обычно проверяет уникальность ID и целостность FK... а логика на жабе. всё. триггер и спока видятсе мне в страшном сне автор 7. Модератор так и не принял меры на: fetching it's a facade's concern =) переведите плз. выборка данных (именно в смысле fetch) это дела Фасада который передаёт это дело в нужном объёме на view layer. репозиторий может найти сущности но о том сколько данных в этот раз нужно клиенту он не в курсе сори если опоздал - писал пол дня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.11.2007, 09:42:52
|
|||
|---|---|---|---|
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
Blazkowicz Отсюда , но как я вижу ... думаю это более точно отражает позицию Jboss по отношению к спрингу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.11.2007, 12:41:07
|
|||
|---|---|---|---|
|
|||
HibernateUtil.currentSession() уже не модно? |
|||
|
#18+
exppдумаю это более точно отражает позицию Jboss по отношению к спрингу Что-то ничего относящегося к теме там не обнаружил. Корни раздора Hibernate vs Spring растут из HibernateTemplate. После присоединения Hibernate к JBoss, начались трения в области JBoss vs Spring, как например объявление JmsTemplate вселенским злом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&tablet=1&tid=2144136]: |
0ms |
get settings: |
16ms |
get forum list: |
24ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
100ms |
get tp. blocked users: |
3ms |
| others: | 363ms |
| total: | 589ms |

| 0 / 0 |
