|
|
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Хочу посоветоваться на счёт использования Hibernate Serssion в MVC Spring3. Я пока знаю 3 способа открытия сессии Hibernate для получения данных в MVC. 1) Использование DAO слоя с функциями, которые возвращают готовые объекты, скрывая в себе открытия и закрытия hiber сессий и создание транзакций. 2) OSIW - Открытие hibernate сессии за каждый запрос. 3) Session Lond Conversation - Открытие Hibernate сессии на каждую сессиию (или чаще). Моё приложение работает по принципу, получаю объект контроллером и храню его в HTTP сессии в фасадном объекте. Несколькими HTTP запросами работаю с объектом, потом сохраняю. До сих пор, я использовал старый способ (1) - DAO, в Spring 3 есть аннотации @Transactional, которые упрощают настройку транзакций и автоматизируют открытие и закрытие hibernate сессии. Недостаток данного способа: - LazyException, если обращаешься к свойствам, которые не были загружены в DAO методах. Достало заботиться о глубине загрузки. - Объекты (иногда даже одни и те же), могут быть открыты в разных Hibernate сессиях, что приводит к ошибке NonUniqueObjectException. Использование (2) OSIW решает лишь часть проблем LazyException. Данный способ не рекомендуется :(. Самым логичным в моём случае выглядит (3) способ Long Conversation. В данном случае о Lazy и NonUniqueObjectException можно будет забыть, т.к. всё будет в одной сессии. Хотелось бы поинтересоваться, у тех кто пользовался Long Conversation. Читал, что и этот способ не рекомендуется в MVC. Интересует: а) Нужно ли отключать Кеширование Hibernate? Опасения. Я использую Oracle, который занимается кешированием, зачем кешровать и в СУБД и в WEB приложении? Потом, ресурсы. Кеширование, будет жрать память контейнера (tomcat в моём случае). б) Я правильно понимаю, что при Session Long Conversation всё время будет открыто соединение с СУБД пока не закроется Hibernate сессиия ?! Есть ли у кого рабочие примеры или ссылки или мысли какой же способ открытия сессии Hibernate лучше ? Не знаю рабочий или нет, я нашёл пример, https://community.jboss.org/wiki/OpenSessionInView , где есть раздел "What about the extended Session pattern for long Conversations?" Правильно я понимаю, что в HibernateSessionConversationFilter, сохранение данных производится при появлении в сессии атрибута END_OF_CONVERSATION_FLAG. Получается, ошибку сохранения не перехватить :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 23:54:55 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Шаров Сергей, 1) Загрузить объект 2) Перевести его в состояние detached 3) Положить его в сессию 4) Редактировать сколько угодно 5) Присоединить к сессии и сохранить изменения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 01:33:14 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdm5) Присоединить к сессии и сохранить изменения Не подскажете, как объект присоединить к сессии для сохранения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 02:34:40 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Ищущий Знанияrdm5) Присоединить к сессии и сохранить изменения Не подскажете, как объект присоединить к сессии для сохранения? session.saveOrUpdate(detachedObject); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 02:46:15 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdmИщущий Знанияпропущено... Не подскажете, как объект присоединить к сессии для сохранения? session.saveOrUpdate(detachedObject); встречный вопрос а почему не session.merge(detachedObject); вы ему не советуете? просто я думаю на будущее еще нужно ему узнать что такое оптимистическая(@Version) и пессимистическая блокировка! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 08:08:32 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdm, в среднем проекте объектов около 500 - не накладно руками всё это делать? Сколько строк кода? Не проще сессию не закрывать? Об этом и был вопрос автора. - объект в сессии должен быть VO? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 10:40:09 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
lvitrdmпропущено... session.saveOrUpdate(detachedObject); встречный вопрос а почему не session.merge(detachedObject); вы ему не советуете? просто я думаю на будущее еще нужно ему узнать что такое оптимистическая(@Version) и пессимистическая блокировка! merge - это не присоединение объекта к сессии. Эта операция сначала делает загрузку объекта из базы, и затем меняет значение полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 10:58:10 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Шаров СергейХочу посоветоваться на счёт использования Hibernate Serssion в MVC Spring3. Я пока знаю 3 способа открытия сессии Hibernate для получения данных в MVC. Вы MVC зря сюда приплели. Он к вопросу отношения не имеет. Для любого другого использования ORM в Web, проблемы аналогичны. И не только в web, в 3-tier с толстым клиентом сложностей ещё больше. Шаров Сергей1) Использование DAO слоя с функциями, которые возвращают готовые объекты, скрывая в себе открытия и закрытия hiber сессий и создание транзакций. DAO метод это лишь маленький кирпич бизнес-транзакции. Бизнес-транзакция, обычно использует несколько различных методов DAO. И ассоциируется, чаще всего с одной транзакцией в БД. Именно это вы упускаете. Есть несколько способов реализовать такой метод: Service aka Transaction Script - stateless реализация бизнес-транзакции, Rich Domain Model - где бизнес логика максимально полностю реализована в Entity, и некоторая комбинация, которую часто практикуют в небольших решениях, это логика в MVC контроллере, который остальным не особо обременен. Таким образом происходит управление транзакцией. А жизненый цикл Hibernate Session, в большинстве случаев, связан один в один с этой транзакцией. Шаров Сергей2) OSIW - Открытие hibernate сессии за каждый запрос. Первый раз вижу такую аббревиатуру. Вбиваем в гугле Open Session In View Antipattern и вдумчиво читаем статьи с детальным описанием недостатка этого подхода. Шаров Сергей3) Session Lond Conversation - Открытие Hibernate сессии на каждую сессиию (или чаще). Здесь всё как раз упирается в тип приложения. Например, если это highload, то нужно сессию на каждый клиентский запрос переподвязывать к новой транзакции, т.к. долгоиграющие транзакции сильно ограничивают производительность. На форумах уже не раз жаловались что долгоживущие сессии Hibernate сам по себе не достаточно стабильно поддерживает в связи с обильным количесвом баг. Может что-то за последние годы поменялось. Шаров СергейМоё приложение работает по принципу, получаю объект контроллером и храню его в HTTP сессии в фасадном объекте. Несколькими HTTP запросами работаю с объектом, потом сохраняю. Что за "фасадный объект"? Копия entity отвязаная от инфраструктуры? Аналог DTO/Value Object? Фасадом, обычно, называют нечто другое. Шаров СергейДо сих пор, я использовал старый способ (1) - DAO, в Spring 3 есть аннотации @Transactional, которые упрощают настройку транзакций и автоматизируют открытие и закрытие hibernate сессии. И как вы выполняете несколько DAO методов в одной транзакции? Шаров Сергей- LazyException, если обращаешься к свойствам, которые не были загружены в DAO методах. Достало заботиться о глубине загрузки. На самом деле это вообще не сложно, если об этом позаботиться изначально при реализации сценария. А если не заботится о глубине загрузки, то у вас просядет производительность за счет кучи дополнительных SELECT запросов. Опять же, вы ничего не говорите о том в каком слое у вас это исключение вылазит. View? Шаров Сергей- Объекты (иногда даже одни и те же), могут быть открыты в разных Hibernate сессиях, что приводит к ошибке NonUniqueObjectException. Это да. Головняк. Шаров СергейИспользование (2) OSIW решает лишь часть проблем LazyException. Данный способ не рекомендуется :(. Есть такое. Шаров СергейСамым логичным в моём случае выглядит (3) способ Long Conversation. В данном случае о Lazy и NonUniqueObjectException можно будет забыть, т.к. всё будет в одной сессии. Надо попробовать. Но как быть с привязкой к транзакции? Шаров Сергейа) Нужно ли отключать Кеширование Hibernate? Как это? Зачем это? Почему такой вопрос? Шаров СергейОпасения. Я использую Oracle, который занимается кешированием, зачем кешровать и в СУБД и в WEB приложении? Потом, ресурсы. Кеширование, будет жрать память контейнера (tomcat в моём случае). Мда. С таким подходом можно сказать что у вас на CPU есть несколько уровней кешей, поэтому больше нигде ничего кешировать не нужно. Запросы к БД сами по себе дорогая операция. Не зависимо от того закешировала БД что-то или нет. Кеш помогает избегать запросов к БД значительно увеличивая производительность. То что кеш занимает память это стандартный trade-in в ПО вообще. Увеличение производительности достигается за счет использование большого количества памяти, чтобы ускорить доступ к данным. А уплотнение данных в памяти, приводит к лишней нагрузке на процессоры. Это всё логично. Шаров Сергейб) Я правильно понимаю, что при Session Long Conversation всё время будет открыто соединение с СУБД пока не закроется Hibernate сессиия ?! По-умолчанию - да. Что и является основным затыком. Скорее всего это можно решить. Как именно - не скажу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:04:22 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123rdm, в среднем проекте объектов около 500 - не накладно руками всё это делать? Сколько строк кода? Не проще сессию не закрывать? Об этом и был вопрос автора. - объект в сессии должен быть VO? VO - это валуе объект? Я не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:05:05 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdmЯ не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно. Основных проблем две. 1я - баги. 2я - "шаг влево, шаг вправо - расстрел". Хочется чего-то нестандартного. Готовься упорно бодаться с hibernate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:10:19 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczrdmЯ не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно. Основных проблем две. 1я - баги. 2я - "шаг влево, шаг вправо - расстрел". Хочется чего-то нестандартного. Готовься упорно бодаться с hibernate. Petro123в среднем проекте объектов около 500 У меня на порядок меньше, может поэтому проблем особых нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:15:42 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdmУ меня на порядок меньше, может поэтому проблем особых нет. да проблем особых ни у кого нет. Есть 2 подхода, и ...годы спора и флейма: - Lazy и контроль всего и вся - OpenSession in View Кстати, т.к. нет единого мнения, то это значит - ОБА решения РАБОТАЮТ. И замечательно, что нет золотой пули. Доп инфа по: OpenSession in View : http://www.rsdn.ru/forum/java/841539.1 Код: java 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. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. понятно, что спринг MVC4 молчит по данному вопросу...пока.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:26:17 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdmVO - это валуе объект? Я не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно. да. Сложности с техническими низкоуровневыми вещами, которые должен делать фреймворк: - следить за транзакциями, сессиями, областями видимости и подгрузкой объектов. - запихивать в HTTP сессию объекты, не из-за хибера, а только когда надо хранить состояние между HTTP-сессимя-запросами (совсем другая БЛ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:32:11 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123rdmУ меня на порядок меньше, может поэтому проблем особых нет. да проблем особых ни у кого нет. Есть 2 подхода, и ...годы спора и флейма: - Lazy и контроль всего и вся - OpenSession in View Кстати, т.к. нет единого мнения, то это значит - ОБА решения РАБОТАЮТ. И замечательно, что нет золотой пули. Я сразу загружаю все необходимые данные(HQL или Criteria), так с LazyException проблем нет. Ведь все необходимые данные для загрузки из базы известны при запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:35:27 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123rdmVO - это валуе объект? Я не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно. да. Сложности с техническими низкоуровневыми вещами, которые должен делать фреймворк: - следить за транзакциями, сессиями, областями видимости и подгрузкой объектов. - запихивать в HTTP сессию объекты, не из-за хибера, а только когда надо хранить состояние между HTTP-сессимя-запросами (совсем другая БЛ). Честно говоря не знаю как прокомментировать) Пока это для меня не очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:44:24 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 11:48:15 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Шаров Сергей, Спасибо rdm - навел меня на мысли почему Session Long Conversation, возможно, и не нужен вообще. Как происходит сценарий работы. 1) Юзер загружает данные из БД. - данные оседают в Level 2 Cache 2) Юзер вносит изменения и сабмитит в контроллер. 3) Контроллер по id достаёт объект из новой session, что происходит очень быстро и без обращений к БД, см п.1 4) Контроллер мержит форму или JSON в persistent object, средствами Spring MVC и других библиотек. 5) По коммиту Hibernate апдейтит все dirty свойства в базу - данные в Level 2 Cache обновляются 6) Повторять сколько угодно раз. - Данные полностью читаются из базы только один раз, за все HTTP запросы. - Апдейтиться только то что действительно поменялось. Единственное большая разница с Session Long Conversation, что комит апдейтов в базу происходит при каждом апдейте из web, вместо того чтобы накапливать изменения в HTTP Session. Но это скорее даже преимущество, чем недостаток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:00:34 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz3) Контроллер по id достаёт объект из новой session, что происходит очень быстро и без обращений к БД, см п.1 - В контроллере Бизнес-логика. Он не должен заниматься техническими вещами. Если сессия протухла (устарела, кем-то закрыта, ....), то этим должен заниматься хибер. - Контроллёр пишет программист руками. Пишет же он аннотацию - @ЕслиНетТранзакцииТоНачатьНовую - Хибер также должен решать - Merge ему делать или: Код: java 1. 2. 3. 4. 5. 6. 7. 8. ЗЫ. Мир движется к межсетевому взаимодействию. И если делать (сессия протухла), то делать по человечески - без кода в БЛ. Как например, сделан TClientDataSet в Delphi )) IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:16:50 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz- Данные полностью читаются из базы только один раз, за все HTTP запросы. тогда он никогда не увидит данные соседа после коммита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:19:38 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123- В контроллере Бизнес-логика. Он не должен заниматься техническими вещами. Если сессия протухла (устарела, кем-то закрыта, ....), то этим должен заниматься хибер. Это вообще не важно. Где логика и кто чем занимается. Я просто описывают идею как оно должно работать. Кто такая протухшая сессия и какое отношение она имеет к моему сценарию я не знаю. Сессия, как и бизнес-транзакция, содаётся на каждый запрос.. Petro123- Контроллёр пишет программист руками. Пишет же он аннотацию - @ЕслиНетТранзакцииТоНачатьНовую Эта аннотация лишь указание котейнеру. А что именно при этом происходит зависит от реализации и конфигурации контейнера. К моему сценарию отношения тоже не имее. Petro123- Хибер также должен решать - Merge ему делать или: [src java] update(), saveOrUpdate(), lock(), replicate() and merge() ... if ( session.contains( myEntity ) ) { // nothing to do... myEntity is already associated with the session } else { session.saveOrUpdate( myEntity ); } Хибер никому ничего не должен. Petro123Мир движется к межсетевому взаимодействию. И если делать (сессия протухла), то делать по человечески - без кода в БЛ. Как например, сделан TClientDataSet в Delphi ))IMHO ROFL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:27:42 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123тогда он никогда не увидит данные соседа после коммита. Кто-то совсем запутался в архитектурах. Кэш один на сервер. Апдейты соседа его чудесно обновляют. Нет никакого кэша на юзера. На кластере кеш чудесно реплицируется, так что даже в распределенной системе актуален. Апдейтов не видно только если сосед, с**а, меняет прямо в базе, мимо сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:29:43 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz 1) Юзер загружает данные из БД. - данные оседают в Level 2 Cache есть с level2 одна очень неприятная фича . кстати предложенное решение в багтрекере у меня не работает, либо что-то поменялось с тех пор, либо у меня лыжи не едут. помогает только явное unproxy на все join fetch сущности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:30:01 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
chpashaесть с level2 одна очень неприятная фича . кстати предложенное решение в багтрекере у меня не работает, либо что-то поменялось с тех пор, либо у меня лыжи не едут. помогает только явное unproxy на все join fetch сущности. Это неприятная фича Hibernate в целом. Баги, которые никогда не будут исправлены, одна из его особенностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:31:40 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, >Сессия, как и бизнес-транзакция, содаётся на каждый запрос.. == хорошо бы, но топик и Lazy говорит не так. Проблема есть или её нет? >Эта аннотация лишь указание котейнеру. А что именно при этом происходит зависит от реализации и конфигурации контейнера. К моему сценарию отношения тоже не имее. === сценарий без кода и ответственных за работу. Что обсуждать. Может там 5 000 строк писать надо. Как было с try{} >Хибер никому ничего не должен. ==== да))))) Про кэш ты прав и это ОФФТОП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:40:20 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123Blazkowicz, >Сессия, как и бизнес-транзакция, содаётся на каждый запрос.. == хорошо бы, но топик и Lazy говорит не так. Проблема есть или её нет? У автора проблема в том что он транзакцию и сессию создаёт в DAO, а нужно на уровень выше, но не так глобально, как Open Session In View. Petro123=== сценарий без кода и ответственных за работу. Что обсуждать. Может там 5 000 строк писать надо. Как было с try{} Не знаю о чем ты. Petro123Про кэш ты прав и это ОФФТОП. Это не Оффтоп. Автор спрашивает про Session Long Conversation подход. Я показываю почему этот подход не нужен из-за Level 2 Cache. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:47:30 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczУ автора проблема в том что он транзакцию и сессию создаёт в DAO, а нужно на уровень выше, но не так глобально, как Open Session In View. замечательно. Тогда почему, спринг управляет транзакциями декларативно. Почему программист должен руками управлять связкой: СессияХибера ---СессияHTTP. Если время жизни объектов явно выше одного запроса HTTP. 3. Тут кто-то говорил, что сессиями программисту лень заниматься. Они у него ВНИЗУ автоматом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:53:05 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
автор Нужно ли отключать Кеширование Hibernate? Обязательно. Если данных мало и запросы хорошо ложатся в дисковый кэш СУБД, то СУБД без проблем выдерживает несколько десятков тысяч запросов в секунду на ноутбуке девелопера, и извращения с кэшем не нужны. Если данных много, то скажется, во-первых, жуткий оверхед по памяти, который в яве присутствует на каждый объект (сравните с ораклом, где даже целые числа имеют переменную длину для экономии каждого байта), а во-вторых, сборщик мусора будет все время перебирать этот кэш, что приведет к неслабым тормозам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:54:08 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪ, хорошо бы конкретно, т.к. AFAIK по умолчанию 1кэш включен. Второй выключен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 12:56:19 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
1кэш включен. Второй выключен Я второй имел в виду, первый выключить невозможно же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:01:18 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123Тогда почему, спринг управляет транзакциями декларативно. Управляет транзакциями разработчик. Декларативное управление лишь один из инструментов. Вопрос в стиле "почему вода мокрая"? Petro123Почему программист должен руками управлять связкой: СессияХибера ---СессияHTTP. Почему программист вообще что-то должен делать? Наверное потому что ORM и Web это совершенно разные технологии. И каждый склеивает их как хочет. Не нравится Spring-клей? Берем Seam-клей или EJB-клей. Не нравится ничего готового? Пишем руками. Это везде так. Petro123Если время жизни объектов явно выше одного запроса HTTP. 8) Время жизни объектов не важно. Время жизни сущностей в любом случае больше HTTP запроса. Petro1233. Тут кто-то говорил, что сессиями программисту лень заниматься. Они у него ВНИЗУ автоматом. Кто говорил? Где говорил? Именно такими словами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:02:28 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪ1кэш включен. Второй выключен Я второй имел в виду, первый выключить невозможно же. +1. Тоже читал, что второй часто в выкл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:02:30 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123тогда он никогда не увидит данные соседа после коммита. Кто-то совсем запутался в архитектурах. Кэш один на сервер. Апдейты соседа его чудесно обновляют. Нет никакого кэша на юзера. На кластере кеш чудесно реплицируется, так что даже в распределенной системе актуален. Апдейтов не видно только если сосед, с**а, меняет прямо в базе, мимо сервера. Так получиться что 2 пользователя могут одновременно редактировать один объект? Как я понял автора темы, ему требуется что-то типа пессимистической блокировки на продолжительное время. Так что как по мне, лучше загрузить detached объект в HTTP сессию, редактировать его там, а при сохранение проверять версию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:06:28 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪОбязательно. Если данных мало и запросы хорошо ложатся в дисковый кэш СУБД, то СУБД без проблем выдерживает несколько десятков тысяч запросов в секунду на ноутбуке девелопера, и извращения с кэшем не нужны. Угу, а выполнение SQL запросов и передача данных между Java сервером и СУБД - бесплатная операция. Йуный джавистЪЕсли данных много, то скажется, во-первых, жуткий оверхед по памяти Кеширование это всегда "жуткий оверхед по памяти". Кеш с нулевым размером ещё пока не изобрели. Впрочем, как и вечный двигатель. Йуный джавистЪкоторый в яве присутствует на каждый объект (сравните с ораклом, где даже целые числа имеют переменную длину для экономии каждого байта) Планка памяти стоит меньше чем день работы Java программиста. А в облаке, возможно, ещё дешевле. Йуный джавистЪа во-вторых, сборщик мусора будет все время перебирать этот кэш, что приведет к неслабым тормозам. Проблеме уже много лет и она успешно решается. Off heap кеш, G1 сборщик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:07:39 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdmКак я понял автора темы, ему требуется что-то типа пессимистической блокировки на продолжительное время. Так что как по мне, лучше загрузить detached объект в HTTP сессию, редактировать его там, а при сохранение проверять версию. Нет. Автор темы лишь спрашивает об этом подходе, как о варианте решения своих проблем. Это не значит что оно ему нужно с точки зрения бизнес-требований. Скорее всего вообще не нужно, потому что уже что-то написано и работает без этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:09:49 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro1233. Тут кто-то говорил, что сессиями программисту лень заниматься. Они у него ВНИЗУ автоматом. Кто говорил? Где говорил? Именно такими словами? аффтар и говорил) 14121686 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:10:49 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Почему скажем просто нельзя добавить поле boolean lock в таблицу и установкой этого поля блокировать объект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:11:44 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Это не по теме, просто интересно. Вместо всяких Select for update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:13:25 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdmSelect for update это _один из методов_ блокировки самой СУБД. Это тоже галка в системных таблицах и снимается САМОЙ субд на коммит АВТОМАТОМ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:22:17 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123rdmSelect for update это _один из методов_ блокировки самой СУБД. Это тоже галка в системных таблицах и снимается САМОЙ субд на коммит АВТОМАТОМ. Я про случай, когда объект нужно блокировать на более чем одну транзакцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:24:12 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdm, тема ошибки Lazy из за того что "кто-то" закрыл сессию, а автоматом она не открывается, и многопользовательская работа (кеш) - разные вопросы. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:25:28 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdmЯ про случай, когда объект нужно блокировать на более чем одну транзакцию. 7 страниц)) Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:28:01 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Кеширование это всегда "жуткий оверхед по памяти". Кеш с нулевым размером ещё пока не изобрели. Впрочем, как и вечный двигатель Я имел в виду, что в яве строка из одного символа занимает, кажется 30 байт, или около того. Угу, а выполнение SQL запросов и передача данных между Java сервером и СУБД - бесплатная операция. Практически бесплатная. Дорогой ресурс - дисковый ввод-вывод и конкуренция за лэтчи (которая никуда не исчезнет в варианте с явой). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:33:19 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Проблеме уже много лет и она успешно решается. Off heap кеш, G1 сборщик. И еще много лет будет успешно решаться. А что, есть какой-то работающий off heap кэш для явы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:38:45 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪА что, есть какой-то работающий off heap кэш для явы? Помимо BigMemory? Любое внятное NoSQL хранилище. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:40:18 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Помимо BigMemory? Любое внятное NoSQL хранилище. Вы предлагаете, имея оракл, поставить впереди него какое-то NoSQL хранилище? Это мне напоминает анекдот про крестьян, которым показали трактор, объяснили, а они отвечают: - Мы поняли, это все хорошо, внутреннее сгорание, бензин, но лошадь-то куда запрягать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:47:00 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪПомимо BigMemory? Любое внятное NoSQL хранилище. Вы предлагаете, имея оракл, поставить впереди него какое-то NoSQL хранилище? Это мне напоминает анекдот про крестьян, которым показали трактор, объяснили, а они отвечают: - Мы поняли, это все хорошо, внутреннее сгорание, бензин, но лошадь-то куда запрягать? Аналогия не уместна. Можете сколько угодно писать в каждой теме Java - говно, Oracle RDBMS - рулит. Сомневаюсь что автору темы это интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:55:46 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Можете сколько угодно писать в каждой теме Java - говно Ни в одной теме не писал такого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 13:56:31 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
по поводу кеша первого уровня. Можно сколько угодно спорить о его нужности. Но пока программист не напишет волшебную фразу - сбросить в БД. А параллельный юзверь - перечатать из БД, изменения друг друга они не увидят. Ведь так? Т.к. хранилище всё таки в БД, а не в хибере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 14:11:39 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123по поводу кеша первого уровня. Если разговор всё ещё о Hibernate, то "кеш первого уровня." это Session. Время жизни которого, в большинстве случаев, одна транзакция. Petro123Можно сколько угодно спорить о его нужности. Это не нужность. Это неизбежность. Или ты таки о втором уровне ? Petro123Но пока программист не напишет волшебную фразу - сбросить в БД. А параллельный юзверь - перечатать из БД, изменения друг друга они не увидят. Ведь так? Т.к. хранилище всё таки в БД, а не в хибере. Разговор тракториста и мотоциклиста, блин. Юзеры не ходят в базу мимо кеша 2го уровня. Поэтому он всегда актуален. Программист не пишет волшебных фраз параллельно с доступом юзера к БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 14:18:34 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, я только про 1-ый кеш - сессионный. Да, он только на время транзакции или 0,01 сек. Программист пишет flush() и закрывает сессию хибера. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 14:36:30 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ты прав, про сессионный кэш 1 уровня и разговаривать не стоит, т.к. он тривиален. Гарантирует одинаковый объект в любом месте кода load(), find(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 14:39:36 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Ну, и делаем вывод: - Кэш 2-го уровня по умолчанию выключен и офотоп - Кэш 1 уровня равен транзакции. ВИ === 1 Читаем объект http\\сервлет ФИО=Вася, Рост=165) 1.1 конец транзакции - всё закрыли 2 Пользователь исправил рост на 182 и и нажал ОК (старт и конец трпанзакции за 0,01 сек) http\\сервлет ФИО=Вася, Рост=182) 2.1 конец транзакции - всё закрыли Вопрос ламерский - где тут Lazy? Зачем деаттачить объект и пихать его в сессию? Если было 2 транзакции по 0,01 сек. Ждём аффтара? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 14:51:02 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123Ждём аффтара? Они никогда не возвращаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 15:00:49 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Добрый день, Blazkowicz! >> Ждём аффтара? > Они никогда не возвращаются. .... сказал он, поглаживая шарфик :) -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 15:04:01 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, )))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 15:17:08 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123Ну, и делаем вывод: ВИ === 1 Читаем объект http\\сервлет ФИО=Вася, Рост=165) 1.1 конец транзакции - всё закрыли 2 Пользователь исправил рост на 182 и и нажал ОК (старт и конец трпанзакции за 0,01 сек) http\\сервлет ФИО=Вася, Рост=182) 2.1 конец транзакции - всё закрыли Вопрос ламерский - где тут Lazy? Зачем деаттачить объект и пихать его в сессию? Если было 2 транзакции по 0,01 сек. Мой вывод такой. 1) Я понял, что использую правильную схему (для своего варианта), а именно Detach Value Object, который я получаю из DAO. Использовать OSIV и Long Conversation - это оффтоп и проблемы производительности в будущем. С Lazy придётся бороться, загружая объекты до нужного уровня "вручную". 2) У меня есть огромные пробелы с пониманием как организовывать сложные транзакции, буду изучать. Но, в моём частном случае - где одна СУБД, я буду использовать метод одна транзакция - одна сессия Hibernate, на каждый метод DAO. Меня полностью устраивает механизм aop и annotation transaction. ================== Хотелось бы сделать так, чтобы можно было редактируя объект, перейти к редактированию вложенных объектов, подгрузив ajax-ом новый view не перезагружая страницу пользователя. Потом в новом view ещё view и т.д. Представляя клиенту подобие толстого клиента и удобного представления данных для редактирования без перегрузки страниц. Для этого - хранить объект в model (я его, наверное, не правильно называл фасад) и удалённое редактирование ajax-ом свойств объектов находящихся в model. - Никаких submit. Это позволяет добиться боле дружественного интерфейса и надеюсь сократить время разработки. Например -------------------- 1) Запрос http://сервлет/контролле1? ID=1 & view= ViewObject & context=root_object. При этом объект сохраняется в сессии пользователя в Model в HashMap "contexts", например, contexts[root_object] . 2) Ответ содержание ViewObject размещаем на странице клиента (ajax.load) 3) ViewObject содержит <form:form modelAttribute='facade' /> <form:input name='contexts[root_object].property1' />. <form:input name='contexts[root_object].property2' />. Имеем свойство LIST вложенных объектов. <c:forEach var='row' items='${facade.contexts[root_object].property2}' /> Показываем клиенту ГРИД. 3.1) value полям устанавливается автоматически Springom MVC. Не обязаельно. Например, combobox содержание элемента загружает сам при помощи самописного widget.combobox. 3.2) Никаких submit. Далее управляем только ajax-ом. А именно на поля формы вешаются события типа change, которые посылают ajax команды "set" (json объекты с данными), которые улетают контроллеру validator. Контроллер получил абсолютное имя свойства и записал туда значения используя (BeanCommons). Он получает список всех элементов формы, значений и отдельно имя свойства, на котором событие случилось. Назад прилетают ошибки - если есть - результат валидации. Кнопка save опять-таки ajax запрос контроллеру сделать saveOrUpdate для нужного объекта из contexts. Как было сказано, присоединяет VO объект к сессии и сохраняет. ==================== Все view работают с одним model, но у каждого view свой объект в model. А это значит, что на странице клиента можно разместить много страниц. И подгружать страницы без submit, используя ajax.load. Как раз при этом и может возникнуть ситуация, когда загруженный в model объект не полностью загружен. Но с этим я понял как бороться - руками. Это позволяет делать деревья вложенных форм и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 16:29:06 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Шаров Сергей2) У меня есть огромные пробелы с пониманием как организовывать сложные транзакции, буду изучать. Но, в моём частном случае - где одна СУБД, я буду использовать метод одна транзакция - одна сессия Hibernate, на каждый метод DAO. Меня полностью устраивает механизм aop и annotation transaction. У вас транзакция начинается и заканчивается в DAO. Вам нужно её область видимости расширить на остальную логику. Но не так широко как OpenSessionInView. Шаров СергейХотелось бы сделать так, чтобы можно было редактируя объект, перейти к редактированию вложенных объектов, подгрузив ajax-ом новый view не перезагружая страницу пользователя. Потом в новом view ещё view и т.д. Представляя клиенту подобие толстого клиента и удобного представления данных для редактирования без перегрузки страниц. Для этого - хранить объект в model (я его, наверное, не правильно называл фасад) и удалённое редактирование ajax-ом свойств объектов находящихся в model. - Никаких submit. Это позволяет добиться боле дружественного интерфейса и надеюсь сократить время разработки. К задаче работы с Hibernate это всё никакого отношения не имеет вообще. Hibernate-у абсолютно всё равно перегружал пользователь страницу, или просто послал AJAX запрос. Его это вообще никак не касается. Постарайтесь отделить одно от другого и не мешать всё в кашу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 16:42:21 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Шаров СергейХотелось бы сделать так, чтобы можно было редактируя объект, перейти к редактированию вложенных объектов Это длинная бизнес-транзакция со всеми вытекающими. Так называемый "пошаговый мастер" в вебе не приветствуется. Хотя можно написать всё)) ______________________________________________ "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 17:16:06 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Шаров СергейНапример -------------------- я так понял, вы серверный программист? ГУИ ни разу не писали? Руками его будете писать? Почему то в Java часто для сервера используют 5 фреймворков. Для ГУИ - ни однго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 17:21:17 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Хотелось бы сделать так, чтобы можно было редактируя объект, перейти к редактированию вложенных объектов, подгрузив ajax-ом новый view не перезагружая страницу пользователя. Потом в новом view ещё view и т.д. Представляя клиенту подобие толстого клиента и удобного представления данных для редактирования без перегрузки страниц. Для этого - хранить объект в model (я его, наверное, не правильно называл фасад) и удалённое редактирование ajax-ом свойств объектов находящихся в model. - Никаких submit. Это позволяет добиться боле дружественного интерфейса и надеюсь сократить время разработки. То, что вы хотите, можно (и нужно) делать без аякса. Проблема аякса в том, что аякс без клиентских MVC фреймворков приводит к типичной jQuery лапше, в которой код загажен DOM-манипуляциями, и любые изменения безнадежно все ломают. Аякс с клиентскими MVC фреймворками позволяет писать нормальный код, но эти фреймворки надо еще изучить, что требует времени. Как бы я делал интерфейс с вложенными сущностями: Интерфейс строится как последовательное редактирование JSON дерева. Каждая страничка somewebapp/edit_some_entity получает через пост параметры текущий JSON и URL возврата. Если пользователь жмет отмену редактирования, то она просто репостит JSON по адресу возврата. Если редактирование произошло успешно, то она добавляет данные в JSON и репостит по адресу возврата обновленный JSON. Таким образом, при переходе на страничку с редактированием вложенной сущности, вы передаете в нее текущий JSON документ и текущий url как адрес возврата. В сессии хранить ничего не надо, лучше записывать в hidden input и таким образом таскать за собой через пост параметры. Таким образом, вы получаете отличную отладочную среду. В веб-консоли браузера вы всегда видите, что ушло от вас и что пришло, и у вас сохраняется вся история последних HTTP запросов. Важно, что до поры до времени все данные у вас должны моделироваться как JSONObject. Всякие детачнутые сущности - это черный ящик и борьба с багами хибернейта. Когда настает время закомитить все в базу, то перекладываете из JSONObject в entity и сохраняете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:55:07 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123Шаров СергейНапример -------------------- я так понял, вы серверный программист? Ты попал в точку. Я действительно серверный программист и как можно дольше отбивался от ГУИ. Т.к. приходится не только разрабатывать, но и сопровождать продукты, в том числе и разработанные самим. Чтобы сопровождение не сожрало все время, приходилось прятаться от ГУИ (Бухгалтеров) и создавать серверные решения не требующие сопровождения. Но в последнее время понадобился ГУИ. Petro123ГУИ ни разу не писали? Руками его будете писать? Почему то в Java часто для сервера используют 5 фреймворков. Для ГУИ - ни однго. Уже практически всё готово и ... руками :). Наверное, потому, что разобраться в ГУИ фраймворке гораздо сложнее (по времени), чем написать свой ;). Например, озадачился я тем, что мне нужен Grid. Первое, что запросил в нете - рейтинг фраймворков. Оказалось, на первом месте jquery и чистый js. Т.к. в последнее время много исследований было потрачено именно на jQuery, то скачал популярный jqGrid - запустил на своем примере - получил полную лажу - не работающий пример :(. При этом ничего сложного я от этого грида не требовал, просто отразить список. Получил список одного серого цвета без возможности выбора. Интерес к данному продукту пропал. Затем увидел Grid из Ext4Js, запустил - работает! Хорошая документация, с работающими примерами, хорошая настройка, но 1) много уже было написано на Jquery и не понятно как совмещать jquery и Ext4js вместе 2) на изучение Ext4js потребуется больше времени, чем есть на окончание прокта :(. 3) Ext4js - крут и работает на IE6+ (:)), но по оценкам специалистов, очень тяжёл для интернета (за счёт гибкости). Зачем вкладывать силы в изучение фраеймворка только для интрАнета ?! В итоге за 2 дня написал свой Грид (jquery.widget) и работающий так как мне нужно, по аналогии с гридом от EXt4JS. В отличии от Ext4js grid, обновляет только одну запись, а не перегружает все записи страницы. Поддерживает вложенные страницы редактирования элементов (мои view). Постраничный просмотр - страница вперёд, назад, в конец, назад, произвольная страница - сделал за 4 часа и главное получил колосальное удовольствие :). Добавление фильтров - не проблема, сортировка на стороне клиента - не буду делать. Зато можно использовать любой вид для списка - не обязательно таблица, а, например. UL список. Хотя думаю, чтобы уменьшить кол-во настроек сделаю <table/> по умолчанию. За два дня готов combobox (проперти - объект) и ещё за два combolist (проперти LIST объект). Как я уже описывал примитивные проперти уже синхронизируются. Сейчас пробую применять наработки и исправлять ошибки. В итоге получился свой "фреймворк", который готов для использования и время придётся тратить не на изучение чужого кода с сотнями не нужных _пока_ свойств, а на развитие своего с нужными свойствами. На счёт того, что использование Ajax только запутает код страницы, отвечу, что сейчас код получается не намного сложнее чем обычные <from:элементы> spring MVC, но получается с человеческим лицом: combobox, combolist, grid и валидация в контроллере, со всеми вытекающими и без перезапросов submit - что намного приятнее для человека, ихмо. Например, combobox выливается в <form:label path='context[currentService].executeRoles' >Список ролей:</form:label> <div name='context[currentService].executeRoles' jcombobox_url='context_autocomplete.do' jcombobox_sql='list_roles' jcombobox_validate_class='ObjRole' /> <br/> и <script> $("[name='context[currentService].executeRoles']").combobox_sql( { // Как показывать объект и загружает значения showItem: function( item ) { return { id: item.id, label: item.name+"-"+item.text }; } }); <.script> Естественно есть js код проверяющий jcombobox_url и делающий из div-ов widget.combobox_sql. Grid в идеале будет содержать описание колонок и имя property из model типа List. Всем большое спасибо, за помощь, буду курить Ваши советы ещё долго. Надеюсь на будущее сотрудничество, с уважением Сергей Шаров.Petro123Шаров СергейНапример -------------------- я так понял, вы серверный программист? Ты попал в точку. Я действительно серверный программист и как можно дольше отбивался от ГУИ. Т.к. приходится не только разрабатывать, но и сопровождать продукты, в том числе и разработанные самим. Чтобы сопровождение не сожрало все время, приходилось прятаться от ГУИ (Бухгалтеров) и создавать серверные решения не требующие сопровождения. Но в последнее время понадобился ГУИ. Petro123ГУИ ни разу не писали? Руками его будете писать? Почему то в Java часто для сервера используют 5 фреймворков. Для ГУИ - ни однго. Уже практически всё готово и ... руками :). Наверное, потому, что разобраться в ГУИ фраймворке гораздо сложнее (по времени), чем написать свой ;). Например, озадачился я тем, что мне нужен Grid. Первое, что запросил в нете - рейтинг фраймворков. Оказалось, на первом месте jquery и чистый js. Т.к. в последнее время много исследований было потрачено именно на jQuery, то скачал популярный jqGrid - запустил на своем примере - получил полную лажу - не работающий пример :(. При этом ничего сложного я от этого грида не требовал, просто отразить список. Получил список одного серого цвета без возможности выбора. Интерес к данному продукту пропал. Затем увидел Grid из Ext4Js, запустил - работает! Хорошая документация, с работающими примерами, хорошая настройка, но 1) много уже было написано на Jquery и не понятно как совмещать jquery и Ext4js вместе 2) на изучение Ext4js потребуется больше времени, чем есть на окончание прокта :(. 3) Ext4js - крут и работает на IE6+ (:)), но по оценкам специалистов, очень тяжёл для интернета (за счёт гибкости). Зачем вкладывать силы в изучение фраеймворка только для интрАнета ?! В итоге за 2 дня написал свой Грид (jquery.widget) и работающий так как мне нужно, по аналогии с гридом от EXt4JS. В отличии от Ext4js grid, обновляет только одну запись, а не перегружает все записи страницы. Поддерживает вложенные страницы редактирования элементов (мои view). Постраничный просмотр - страница вперёд, назад, в конец, назад, произвольная страница - сделал за 4 часа и главное получил колосальное удовольствие :). Добавление фильтров - не проблема, сортировка на стороне клиента - не буду делать. Зато можно использовать любой вид для списка - не обязательно таблица, а, например. UL список. Хотя думаю, чтобы уменьшить кол-во настроек сделаю <table/> по умолчанию. За два дня готов combobox (проперти - объект) и ещё за два combolist (проперти LIST объект). Как я уже описывал примитивные проперти уже синхронизируются. Сейчас пробую применять наработки и исправлять ошибки. В итоге получился свой "фреймворк", который готов для использования и время придётся тратить не на изучение чужого кода с сотнями не нужных _пока_ свойств, а на развитие своего с нужными свойствами. На счёт того, что использование Ajax только запутает код страницы, отвечу, что сейчас код получается не намного сложнее чем обычные <from:элементы> spring MVC, но получается с человеческим лицом: combobox, combolist, grid и валидация в контроллере, со всеми вытекающими и без перезапросов submit - что намного приятнее для человека, ихмо. Например, combobox выливается в <form:label path='context[currentService].executeRoles' >Список ролей:</form:label> <div name='context[currentService].executeRoles' jcombobox_url='context_autocomplete.do' jcombobox_sql='list_roles' jcombobox_validate_class='ObjRole' /> <br/> и <script> $("[name='context[currentService].executeRoles']").combobox_sql( { // Как показывать объект и загружает значения showItem: function( item ) { return { id: item.id, label: item.name+"-"+item.text }; } }); <.script> Естественно есть js код проверяющий jcombobox_url и делающий из div-ов widget.combobox_sql. Grid в идеале будет содержать описание колонок и имя property из model типа List. Всем большое спасибо, за помощь, буду курить Ваши советы ещё долго и постараюсь применить в новом проекте. Надеюсь на будущее сотрудничество, с уважением Сергей Шаров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 22:02:03 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Шаров Сергей, вроде всё разумно пишешь))). Правда немного оторвано от реалий, как будто писал на острове)...и всё время руками ;). Если серверный, тогда почему такой ламерский вопрос-сабж про Lazy? авторНаверное, потому, что разобраться в ГУИ фраймворке гораздо сложнее (по времени), чем написать свой ;). Вообще, это свойство характера), а не аксиома. Вот, по тебе видно, что ты уже всё решил ещё до написания вопроса на форуме). Да, в небольшом проекте - быстрее напишешь. Но, Rich уровня SmartGWT - нет. ..... Так что, работать будут все твои 3 варианта). Дьявол кроется в деталях. ЗЫ. Про длинные транзакции. Если в десктоп, всё под полным контролем, и мы всегда знаем когда дать Rollback. То в ослике всё сложнее (асинхронность, псевдомодальность и т.д.). Поэтому, нравится или не нравится, но ГУИ десктоп \ веб \ андроид - везде другой. imho Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 23:48:06 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
В итоге получился свой "фреймворк", который готов для использования и время придётся тратить не на изучение чужого кода с сотнями не нужных _пока_ свойств, а на развитие своего с нужными свойствами. А вы выложите его на гитхаб. Куча примеров, когда люди делали микрофреймворки, которыми потом пользовались куча людей, например Backbone.js (там тысяча строк всего, при этом 5000000 упоминаний в гугле). Пока непонятно, где у вас модель хранится. Я правильно понимаю, что компоненты сами запрашивают ее с сервера, и она неявно хранится внутри компонентов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 00:32:34 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Да, в небольшом проекте - быстрее напишешь. Но, Rich уровня SmartGWT - нет. Ты просто начинал с GUI, поэтому тебе кажется что GUI круче html и ты всегда будешь все сравнивать с GUI. На западе, например, спецы которые начинали с IBM 3270, с радостью восприняли появление web. Том Кайт писал что ему больше нравятся web интерфейсы чем GUI. Я недавно делал мелкие доработки в свинг интерфейсе, мне показалось неудобно, странные лэйауты, отсутствие инструментов типа инспекторов html. Это все субъективно, конечно, я просто хочу обратить внимание, что есть куча людей, в том числе старой школы, для которых GUI - не идеал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 00:51:19 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪ, я тебя не понял. - ГУИ - есть всегда (прокладка между пользователем). - ГУИ может быть в любом виде (html \ exe_win \ exe_DOC \ ) - т.е. ГУИ это контролы. Если понимать твою опечатку под Rich. То увы, табличка в веб с сортировкой, группировкой, фильтрами - быстро нравится пользователям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 00:57:37 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123Йуный джавистЪ, я тебя не понял. - ГУИ - есть всегда (прокладка между пользователем). - ГУИ может быть в любом виде (html \ exe_win \ exe_DOC \ ) - т.е. ГУИ это контролы. Если понимать твою опечатку под Rich. То увы, табличка в веб с сортировкой, группировкой, фильтрами - быстро нравится пользователям. Я думаю речь шла о том, что многим удобнее делать пользовательский интерфейс использую html/css/js, чем к примеру Swing. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 01:01:23 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdm, Десктоп и Веб сравнивать сложно. Они параллельные. Как нельзя сказать что девочки хуже / лучше мальчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 08:16:27 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123rdm, Десктоп и Веб сравнивать сложно. Они параллельные. Как нельзя сказать что девочки хуже / лучше мальчиков. А можно сказать что удобнее? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 10:21:35 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
rdm, OFF удобнее кому? Админу? Пользователю? Программисту? Или всем сразу))? .. В ТЗ пишется время отклика программы 0,1 сек..... Уже одно это ставит под вопрос веб. А программисту пофиг на чём писать (если он стремится к этому). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 11:10:39 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Petro123В ТЗ пишется время отклика программы 0,1 сек..... Уже одно это ставит под вопрос веб. натурально? смотря как делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 11:48:01 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
am_sasaPetro123В ТЗ пишется время отклика программы 0,1 сек..... Уже одно это ставит под вопрос веб. натурально? смотря как делать конечно) + за какие деньги и каким профи по веб-гуи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 11:52:55 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
В ТЗ пишется время отклика программы 0,1 сек..... Ну, не надо писать в ТЗ лажу. С latency в 100мс можно в онлайн шутеры играть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 15:10:40 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
off Йуный джавистЪС latency Аналитики таких страшных слов не знают))). Справочник аптечного киоска - в деревне Пупкино - заказ лекарств по списку 50 000 наименований. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 15:25:32 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
авторАналитики таких страшных слов не знают))). Как они тогда измерят, что это именно 100мс а не 300 мс? К тому же, с чего это GUI будет быстрее чем web? За счет бинарных протоколов? А какой-нибудь оракл клиент в деревне пупкино аналитик будет устанавливать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 18:00:41 |
|
||
|
Использование Hibernate Serssion в MVC Spring3.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪ, ну что ты усложняешь? ВИ ==== - Десктоп клиент. Девчушка набирает лекарство вслепую на клаве. Поиск на onChange текст. - как нашлось - Enter - фокус на кол-во, ввела штук и опять Enter Включила модем Dial-UP, но к вопросу это отношение не имеет. - отправила заказ на 400 наименований. - утром привезли. ........ О чём спор? Что десктоп программы не нужны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 18:23:27 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2129558]: |
0ms |
get settings: |
19ms |
get forum list: |
26ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
62ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
161ms |
get tp. blocked users: |
3ms |
| others: | 317ms |
| total: | 624ms |

| 0 / 0 |
