|
|
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, такая ситуация: Хочу отдельно сущности (POJO) с бизнес логикой, отдельно персист на основе Hibernate. Так чтобы логика могла обращаться к персисту по вопросам CRUD. С простыми операциями все решается, но у меня возникают ситуации, когда перед сохранением сущности нужно выполнить ряд действий с целью вычисления некоторых из ее свойств и проверки на возможность сохранения. При этом в процессе выполнения действий могут быть получены из базы/созданы другие сущности и они так же должны быть сохранены (в случае успешной проверки). Вопрос: куда мне приткнуть эти проверки и действия? сделать их методами самой сущности? не могу потому что проверка+создание других сущностей+запись должны выполняться в одной транзакции, а прямой доступ к сессиям и транзакциям из логики делать я не могу. Вынести отдельно - ну все-таки это личное дело сущности, как проверять и что делать перед записью, получается некрасиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 17:44:14 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerХочу отдельно сущности (POJO) с бизнес логикой Зачем что-нипопадя обзывать POJO - мне не ясно. Почитайте определения этого термина. Сущность так и называют - Entity. POJO это объект отвязаный от какой-либо инфраструктуры. Можете поискать по форуму, уже несколько раз объяснял. javapecker, отдельно персист на основе Hibernate. Это очень странное желание, так как хибернейт очень сильно влияет на реализацию логики. Это и ленивые загрузки и dirty check. javapeckerТак чтобы логика могла обращаться к персисту по вопросам CRUD. Ну, а как иначе. javapeckerа прямой доступ к сессиям и транзакциям из логики делать я не могу. Сессии и транзакции это не одно и тоже. Всегде можно обойтись без прямого доступа через менеджер и привязку к потокам. А управление транзакциями это вообще одна из задач бизнес-логики. В целом, же похоже, что вы бросаетесь в крайности в попытке реализовать Rich Domain Model без Transaction Script. Те сложности, о которых вы говорите, давно и успешно все решают через "сервисы" aka Transaction Script. Сервисы отвечают за процесс и управляют транзакциями. Зачем это всё сущностям - вопрос открытый. Рекомендую хотя бы к поверхностному просмотру: http://rsdn.ru/forum/design/4754417.flat.aspx http://rsdn.ru/forum/design/3406168.flat.aspx http://rsdn.ru/forum/design/3636312.flat.aspx http://rsdn.ru/forum/design/3145651.flat.aspx http://rsdn.ru/forum/design/4688683.flat.aspx http://rsdn.ru/forum/design/3409738.flat.aspx http://rsdn.ru/forum/design/3619982.flat.aspx http://rsdn.ru/forum/design/4473246.flat.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 17:58:23 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerВопрос: куда мне приткнуть эти проверки и действия? сделать их методами самой сущности? не могу потому что rsdnВ противовес Domain Model паттерну, который пытается реализовать у мальчика Пети метод Покушать(), Поспать(), Искупаться(), анемичная модель реализует семь различных нянек, каждая из которых в зависимости от различных своих причуд насильно кормит мальчика Петю с ложечки, купает и укладывает спать. есть 2 концепции. Серебрянной пули - нет. ______________________________________________ "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 09:38:23 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Blazkowicz , большое спасибо за ликбез и ссылки. Теперь, если можно, давайте на примере. Я придумал пример приложения, которое описывает мою проблему. Есть благотворительное общество "ЖОР", производящее и бесплатно предоставляющее конфеты "Драже красное" и "Драже зеленое" (всего два вида) для детей из неблагополучных семей в любых количествах. "ЖОР" предоставляет конфеты в ящиках. В каждом ящике два отсека, по одному для каждого вида драже. Емкость отсеков, их соотношение и размер ящиков могут быть изменены произвольно по желанию "ЖОР". И есть группа добрых людей "Детолюбы" , в свободное от работы время упаковывающие конфеты в мешки, и непосредственно раздающие детям. Единственное требование "ЖОР" - чтобы на мешках с конфетами были напечатаны номера ящиков, из которых взяты конфеты. Каждый мешок может содержать конфеты только одного вида. Процедура упаковки такая: "Детолюб" смотрит, есть ли у него в ящиках конфеты нужного вида. Если есть, насыпает в мешок сколько нужно и ставит печать с номером ящика, если не хватает, берет следующий ящик и сыпет из него. Если у него закончились ящики, идет в "ЖОР" и берет новый, и так пока не заполнит мешок конфетами. Мешки, кстати, тоже разного размера все. Таким образом, после упаковки мы имеем мешок с конфетами, на котором один или несколько штампов с номерами ящиков. Может случиться так, что "ЖОР" откажется предоставить очередной ящик с конфетами, таким образом не будет достаточно конфет чтобы заполнить мешок. Тогда "Детолюб" должен высыпать из мешочка то что он туда уже насыпал обратно в те ящики, из которых брал. "Детолюб" никогда не может взять ящик "про запас". Только для того чтобы положить оттуда в мешок что-нить. Если вдруг ребенок вернет мешок с конфетами, "детолюб" обязан высыпать все в ящики из которых брал, и если один из ящиков окажется полным, немедленно вернуть его в "ЖОР", и попросить следующий только когда он реально понадобится. Вот такая у меня история. Помогите мне, пожалуйста, найти хорошее отражение такой предметной области. Приложение должно автоматизировать деятельность "Детолюба", то есть предоставлять детям мешки с конфетами, и реализовывать описанные алгоритмы его поведения. Нужно использовать хибернейт. Небольшую иллюстрацию прилагаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 14:22:03 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, круто:)) Художник или программист? Начинай писать ТУТ классы. И не забудь, что Бизнес-транзакция имеет мало отношения к технической транзакции сохранения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 14:41:26 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, ОК, пишем классы. Чтобы сильно много не писать, немного упрощу и изменю задачу. Ребенок сам приходит к "Детолюбу" и просит его дать ему мешок с конфетами, детолюб записывает пожелание ребенка, и пытается его выполнить - то есть найти конфеты в требуемом количестве. С учетом хибернейта, нарисую сначала статику: Код: 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. Теперь нужно разобраться, где будет производиться заполнение partList и где будет проверяться, возможно ли выдать нужное количество конфет. Пусть новые Box-ы от "ЖОР" выдает специальный сервис: Код: java 1. 2. 3. Этот сервис заботится о том, чтобы выдать коробку с "ЖОР", иногда может отказать в выдаче и выбросить исключение Также пусть будет сервис, который выдает список коробок, уже полученных от "ЖОР", из которых уже когда-либо выдавались конфеты: Код: java 1. 2. 3. Теперь можно написать алгоритм обработки, или, насколько я понял, бизнес - транзакции.Пишу прямо здесь, так что может быть море ошибок. Код: 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. Вот, теперь вопрос, как будет выглядеть та часть программы, которая будет отвечать за сохранение результатов этой транзакции в базу и откат в случае эксепшна? Ведь это чистая логика, я не хочу прямо сюда писать хиберню, но хочу чтобы у меня однозначно выполнилась такая транзакция: в случае успеха(когда конфет хватает) чтобы сохранился сам SweetPack, все новые Box(это самостоятельные сущности), и список частей SweetPack-а. В случае провала - чтобы сохранился только SweetPack, список частей очистился, все новые Box-ы не попали в базу. Кроме того, мне нужна такая штука: если ни у одного SweetPack нет ссылок через их списки на Box, я хочу чтобы этот Box был удален из базы. Уменьшение количества ссылок может происходить при реализации поведения "аля 1С" - когда я сознательно чищу список SweetPack, но не удаляю его самого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 18:33:12 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
ну и вид конфет пусть один будет, забыл написать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 18:41:45 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Неудача или откат - это вернуть все как было до начала транзакции. Поэтому перепиши эту часть постановки. Если конфет один вид то теряется весь смысл. Т.е. не ленись. Опиши сначала задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 19:21:30 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Кроме того. "Пошел за ящиком" это тоже подлежит автоматизации)))? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 19:29:28 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, меняю постановку. Пусть у меня будет n видов конфет. Тогда классы изменятся следующим образом: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 01:10:16 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Блин..случайно энтер нажал. Продолжим. process() тоже изменится, но весь его описывать уже не буду. Вообщем получается так, что process() это и есть мой детолюб. Он получает заявку от ребенка - объект SweetPack, и инструкции что делать с этим объектом. А делать он может следующее: 1. Просто запомнить, что ребенок хочет конфет=записать объект с пустым списком partList. 2. Исполнить заявку - то есть записать объект, заполнив его partList - если не получит отлуп от JORService. 3. Принять от ребенка мешок обратно - очистить partList, записать объект.+ проверить, остались ли ссылки на используемые боксы. Если нет - удалить их. Исходя из этого, можно сказать, что Petro123 Кроме того. "Пошел за ящиком" это тоже подлежит автоматизации)))? подлежит! потому как именно process()-детолюб ходит за ящиком JORService.getBox(). Также из этого следует, что пользователь системы - это ребенок.Он составляет заявку - заполняет каких конфет и сколько он хочет в SweetPack, он определяет что с этим делать, нажимая на кнопки сохранить, выполнить и отмена (пункты 1,2,3) выше. Вообщем придется добавить в код вот это: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Теперь пункты 1,2,3 подробнее с точки зрения состояний объектов: 1. Сохранение - может применяться как к вновь созданному объекту, так и к полученному от персиста из базы. В первом случае объект просто записывается с пустым списком- process(SAVE) . Во втором - если список пуст, то просто записывается, если же список не пуст, то есть заявка выполнена, придется запускать process(POST) -потом записывать , так как данные могли измениться. 2. Выполнить - тоже как для вновь созданного, так и полученного объекта. при этом вне зависимости от состояния списка выполняется process(POST), потом записывается объект 3. Отмена - только для объекта полученного из персиста, у которого список не пуст. очищается список, объект записывается process(CANCEL) То есть во всех трех случаях вне зависимости от проверок объект записывается, все варианты относятся только к состоянию списка - то есть заявку от ребенка детолюб примет в любом случае, вопрос сможет ли он ее выполнить, и захочет ли этого сам ребенок. Поэтому эта фраза Petro123Неудача или откат - это вернуть все как было до начала транзакции. Не совсем верна, объект полюбому надо записать, а вот список надо очистить в случае неудачи. Как-то так. Возвращаясь к баранам 1.С какой стороны прикрутить персист сюда, не мешая его с логикой? 2. Как обеспечить удаление боксов на которые нет ссылок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 01:47:59 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
>Вообщем получается так, что process() это и есть мой детолюб === неверно. Если автоматизировать процесс, То надо вводить сущность процесс и его состояния. А это геморрой в архитектуре и в разы усложняет ИС. Это понять очень просто идя по ГОСТу разработки: - после словесного описания нужны ВИ или преценденты - разделить всё на Пользователь ---Система (ИС). Т.е. нет никаких Детолюбов. Есть - Система (ИС). Например: ВИ №1 - "Заявка на конфеты" - Открыл окно Заявка на конфеты - Вбил количество коныет - Нажал кнопку "Подобрать" - ....... Это должно быть ДО диаграммы классов. Остальное попозже допишу... ______________________________________________ "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 13:46:57 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123Кроме того. "Пошел за ящиком" это тоже подлежит автоматизации)))? подлежит! вот на этом - подробнее. Т.к. в Java любят всё усложнять из-за понятия Сервис\Сообщения\Поток сообщений\... .......... Итак, нафига тебе: - сохранять состояние процесса между сессиями, помня, что это Веб - запрос 40 миллисекунд = ответ, забыл о нём? - ты точно хочешь пойти по пути а-ля MTS - "Ваша заявка принята - результаты в Меню-СостояниеОперации"? Пока, такой геморрой не требуется. Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 13:55:50 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
ЗЫ. Удивительно, как можно. без видимых причин, в 10 раз усложнить и удорОжить задачу. Это всё равно, что вместо большого запроса в СУБД, использовать курсор и перебирать по строкам (процесс). Это усложнение, только удаляет обсуждение от сабжа (анемичная модель). IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 14:01:03 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, мы очевидно друг друга не понимаем, по крайней мере я вас не понимаю. Я почти уверен, что плохо объясняю чего хочу. Может быть вариант использования поможет, пытаюсь объяснить его максимально подробно. Я именно его и подразумевал когда писал классы. Все что за рамками этого варианта, оставим. ВИ1: Новая заявка. 1.Пользователь открывает форму заявки на конфеты. 2.Пользователь вводит желаемое количество конфет и их вид. 3. На форме три кнопки: сохранить, выполнить, отменить. Так как заявка новая, кнопка "отменить" неактивна. Пользователь хочет, чтобы его заявка была выполнена немедленно - и он нажимает на кнопку выполнить, немедленно запуская тем самым процесс выполнения заявки (многострадальный метод process()). Пока выполняется этот метод (выполняется он быстро, менее 5 секунд), пользователь ждет и не имеет возможности жмякать на кнопки. 4-1. Если заявку удалось выполнить, пользователь получает сообщение "заявка выполнена", кнопка "отмена" становится активной, на вкладке формы "информация о заявке" появляются данные об источниках конфет для выполнения заявки. Кроме того, пользователь, занимающийся отчетностью, сможет увидеть выполненную заявку в своих отчетах. 4-2. Если заявку не удалось выполнить, пользователь получает сообщение "заявка не выполнена" с указанием причин отказа, состояние активности управляющих кнопок не меняется, введенные данные сохраняются (то есть пользователь может закрыть форму, съездить в Крым, потом найти уже заполненную форму в списке, открыть и попытаться нажать кнопку "выполнить" снова), вкладка "информация о заявке" содержит пустой список. Вот еще уточняющие моменты: Petro123Итак, нафига тебе: - сохранять состояние процесса между сессиями, помня, что это Веб - запрос 40 миллисекунд = ответ, забыл о нём? - ты точно хочешь пойти по пути а-ля MTS - "Ваша заявка принята - результаты в Меню-СостояниеОперации"? -про веб я ни слова нигде не говорил -про сохранение информации между сессиями тоже (ну если считать сохранение сущности - то говорил, но это обычный персист. Да и что тут сверхъестественного? сохранил я заявку, через месяц открыл посмотрел, как тему в форуме например. Сохранение делал один вызов process() - одна транзакция, второй раз открою - обработкой будет заниматься другой process() -другая транзакция, между ними никакой связи нет) -я просто хочу знать, как мне описать метод process() системы, выполняющий заявку, чтобы непосредственно в нем не использовать напрямую методы хибернейта. Пересмотрите предыдущие посты с этой точки зрения, и тогда, я думаю, мы будем смотреть на ситуацию с одного бока. Так что process() - это все-таки детолюб , основная часть системы, обрабатывающая заявку пользователя. Сам по себе, как и живой детолюб, он не имеет состояний. Он переводит из одного состояния в другое саму заявку. То есть process() - это ровно то, чем я заменил живого детолюба. При этом модель получается анемичной в том смысле, что сущность "Заявка на конфеты" не обладает инкапсулированным поведением, за поведение отвечает метод сервиса, которому такая сущность передается входным аргументом. Повторюсь не помню какой раз - моя проблема в том что я не знаю как подружить process() и Hibernate, обеспечив целостность транзакции и не вызывая напрямую методов Hibernate, потому что в process() - моя логика, и я не хочу мешать ее с персистом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 00:09:42 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
вы уверены что ваам нужен хибер? activerecord не хотите попробовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 00:33:13 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
забыл ник, я месяц убил на хибернейт, и полагаю, что его возможностей хватит для такой задачи. Как выглядит то что вы предлагаете, я вообще не представляю. Если напишете как конкретно решить задачу используя это, и это будет проще и элегантнее чем с хибернейтом, то может и захочу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 01:58:55 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerзабыл ник, я месяц убил на хибернейт, и полагаю, что его возможностей хватит для такой задачи. Как выглядит то что вы предлагаете, я вообще не представляю. Если напишете как конкретно решить задачу используя это, и это будет проще и элегантнее чем с хибернейтом, то может и захочу. я счас почитаю, конечно, _длинный пост_ выше. Но, IMHO, краеугольный камень, это аксиомы: - большинство проектов тут, это веб авторпро веб я ни слова нигде не говорил - проекты НЕ веб - это десктоп\клиент-сервер - у вторых могут быть длинные транзакции, у первых тоже, но обоснованно - ваш Процесс претендует на длинную, либо через состояние, либо через механизмы самого хибера Это не штатный режим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 09:47:15 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker 3. На форме три кнопки: сохранить, выполнить, отменить ==== Нельзя. 1. Отменять нечего. Нельзя навешивать на одно окно (контроллёр) кучу логики с Enable-Disable\Visible 2. Либо кнопка Сохранить, Либо Выполнить - это к Вашим спецам по Визабилити. Они подтвердят. Пока выполняется этот метод (выполняется он быстро, менее 5 секунд), пользователь ждет и не имеет возможности жмякать на кнопки. 4-1. ======== кто сказал что он ждёт? Если вы специально делаете ограничение (неасинхронный процесс), то это одно. Ксли это Веб-AJAX то другое. Можно по всякому. 2. Почему 5 секунд? А не 0,5 мммм Зачем вы удлинняете процесс, который можно решить за 0,1 сек? Тут до Хибера ещё далеко. Я вас понял, но почему нужна именно заявка, а не сразу - результат за 0,1 сек? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 09:57:37 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
авторпоявляются данные об источниках конфет для выполнения заявки Итого 2 варианта: А - без заявок, в он-лайне - сразу результат, либо конфеты, либо Отлуп ))) Б - с заявкой. Но тогда нужны механизмы блокирования рессурса для заявки. Аналог жд. билеты. Что оооочень хреново. В одной кассе балеты на вагон есть, в другой - нет. Пока нет ТЗ на вариант Б, сложно искать техническое решение. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 10:03:39 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
автор4-1. Если заявку удалось выполнить, пользователь получает сообщение "заявка выполнена", кнопка "отмена" становится активной, на вкладке формы "информация о заявке" появляются данные об источниках конфет для выполнения заявки. Кроме того, пользователь, занимающийся отчетностью, сможет увидеть выполненную заявку в своих отчетах. берём аналог из соседней области ИС: 4-1. Если заявку удалось выполнить (АвиаБилет куплен), пользователь получает сообщение "заявка выполнена(АвиаБилет куплен)", кнопка "отмена" становится активной (??? Вернуть Билеты?), на вкладке формы "информация о заявке" появляются данные об источниках конфет для выполнения заявки. Кроме того, пользователь, занимающийся отчетностью, сможет увидеть выполненную заявку в своих отчетах (это OFFTOP). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 10:19:43 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, опять непонятки. Мне надо идти на курсы ясного выражения мыслей наверное. Давайте другую абстракцию попробуем, чтобы слово заявка вас так не смущало. Вам нужны продукты, у вас есть ребенок. вы можете: а) написать ему записку "чокупить" и сразу отправить в магазин б) написать ему записку в понедельник, а отправить с этой запиской в магазин в пятницу. Petro123==== Нельзя. 1. Отменять нечего. Нельзя навешивать на одно окно (контроллёр) кучу логики с Enable-Disable\Visible 2. Либо кнопка Сохранить, Либо Выполнить - это к Вашим спецам по Визабилити. Они подтвердят. Что плохого когда на форме есть и сохранить и выполнить и отменить? по-моему это удобно. Это как раз отражает в одном месте все то, что можно сделать с заявкой. Как это будет с отдельно сохранить/выполнить нарисуйте, если не сложно. я плохо себе такое удобство представляю. Petro123 Зачем вы удлинняете процесс, который можно решить за 0,1 сек? Да ничего я не удлиняю, просто прикинул сколько он будет выполняться на абсолютном корче при хреновом канале связи. В нормальных условиях пользователь и не заметит времени выполнения. Petro123А - без заявок, в он-лайне - сразу результат, либо конфеты, либо Отлуп ))) Именно так, но с небольшим уточнением. Приходите вы в ресторан, смотрите меню, и говорите: мне борщ, котлеты, пельмени, графин водки, торт, суши, пиццу и орешки. Официант говорит - ничего нет, приходите завтра(отлуп). И вы приходите, опять листаете меню и начинаете вспоминать, что же вы там заказывали(херово). А надо так: отлуп получили, заказ не получили, но информация о нем осталась, и вспоминать мучительно потом не придется. Petro123Б - с заявкой. Но тогда нужны механизмы блокирования рессурса для заявки. Разумеется нужны, но только на время выполнения process(),а это быстрый метод. Это во-первых, во-вторых блокировка ресурсов пока за рамками обсуждаемой задачи. Petro123Пока нет ТЗ на вариант Б, сложно искать техническое решение. Сначала классы, потом ВИ, теперь ТЗ)). почему сложно искать техническое решение именно для того вопроса который я задаю в каждом посте? Petro123Я вас понял, но почему нужна именно заявка, а не сразу - результат за 0,1 сек? ААААА!!!!! -мне результат нужен, мне безуууумно нужен результаааат. НО, если получить его я не могу, я хочу чтобы исходные данные остались в форме и все. Чтобы я мог открыть ее потом, и попробовать получить результат снова, не вводя никаких больше данных Petro123======== кто сказал что он ждёт? Если вы специально делаете ограничение (неасинхронный процесс), то это одно. Я вам говорю - он ждет, один поток, никакой асинхронности и точка.(в рамках моего вопроса) Petro123Аналог жд. билеты. Что оооочень хреново. В одной кассе балеты на вагон есть, в другой - нет. Согласен, такой проблемы избежать практически невозможно ,с той точки зрения что когда кассир смотрит наличие блиетов - может видеть устаревшую информацию на какой-нить необновленной страничке, но попытка продать/забронировать уже проданное место все вернет на круги своя. так что это мы отнесем к разряду вынужденных неудобств,и (в рамках моего вопроса) это меня абсолютно не беспокоит. Petro123- ваш Процесс претендует на длинную, либо через состояние, либо через механизмы самого хибера Это не штатный режим. Да где это он на длинную претендует? С чего вы взяли? Нет у Процесса никаких состояний, нету. Состояние есть у заявки плохое слово, обзовем ее документом, как в 1с, вы ее упоминали, значит знаете как она устроена. Документ в 1с может быть просто сохранен, может быть проведен - у него есть состояния, а у процесса ничего нет - это просто алгоритм "проведения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 10:56:30 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Petro1234-1. Если заявку удалось выполнить (АвиаБилет куплен), пользователь получает сообщение "заявка выполнена(АвиаБилет куплен)", кнопка "отмена" становится активной (??? Вернуть Билеты?) Вот, теперь я понял где я вас запутал, и запутал конкретно. Прощу прощения, пользователь, используя ваши аналогии - это кассир, а не пассажир. И он вполне может отменить продажу билета, если, например, ввел некорректные данные. Впоследствии, он их исправит и выполнит еще раз. Разумеется, не во всех случаях можно редактировать уже выполненные/проведенные/активные (как удобнее) документы/заявки. Но это тоже оффтоп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:07:52 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, Petro1234-1. Если заявку удалось выполнить (АвиаБилет куплен), пользователь получает сообщение "заявка выполнена(АвиаБилет куплен)", кнопка "отмена" становится активной (??? Вернуть Билеты?) Вот, теперь я понял где я вас запутал, и запутал конкретно. Прощу прощения, пользователь, используя ваши аналогии - это кассир, а не пассажир. И он вполне может отменить продажу билета, если, например, ввел некорректные данные. Впоследствии, он их исправит и выполнит еще раз. Разумеется, не во всех случаях можно редактировать уже выполненные/проведенные/активные (как удобнее) документы/заявки. Но это тоже оффтоп уж простите, свой ответ начну с вашего короткого поста. авторпользователь, используя ваши аналогии - это кассир - зря. Вы покупали билеты на tu-tu.ru и т.д.? Дак вот, в кассе кассир делает точно то-же что пользователь. Только сверху берёт 400 рублей. За то что вам лень интернет запустить. Итак, чем кассир отличается от пользователя? Вопрос интересный)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:16:25 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123А - без заявок, в он-лайне - сразу результат, либо конфеты, либо Отлуп ))) Именно так, но с небольшим уточнением. Приходите вы в ресторан, смотрите меню, и говорите: мне борщ, котлеты, пельмени, графин водки, торт, суши, пиццу и орешки. Официант говорит - ничего нет, приходите завтра(отлуп). И вы приходите, опять листаете меню и начинаете вспоминать, что же вы там заказывали(херово). А надо так: отлуп получили, заказ не получили, но информация о нем осталась, и вспоминать мучительно потом не придется. у меня в А - так сделать не проблема. Обычный лог работы с клиентом. А чуть попозже - отдельная система CRM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:22:18 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Бизнес процесс: - начало - Открыл ИС, Что-то написал - конец - Ушёл с билетами Вот этот процесс - самый длинный. И ты его удлинняешь по ОДНОМУ обоснованию авторААААА!!!!! -мне результат нужен, мне безуууумно нужен результаааат. НО, если получить его я не могу, я хочу чтобы исходные данные остались в форме и все. Чтобы я мог открыть ее потом, и попробовать получить результат снова, не вводя никаких больше данных IMHO это - ерунда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:28:53 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Petro123Итак, чем кассир отличается от пользователя? Полномочиями, я не делаю продажу жд билетов или вообще билетов, почему вы в пример приводите мне то, чего у меня и близко нет? Отдельные аспекты возможно, но нельзя же так обобщать. Я пытаюсь придвинуть то что я написал поближе к вашим постам просто чтобы говорить об одних и тех же вещах. Какие 400 рублей? Если так удобнее, пусть голос внутри головы говорит кассиру что вводить, и нет никаких других пользователей, и вселенский разум наделил его полномочиями отменять выполненные заявки. Я не хочу выяснять почему он может или не может это делать, правильно ли это с точки зрения железной дороги и воздушных сообщений. Аксиома: мой пользователь МОЖЕТ нажимать на кнопки которые у него есть: сохранить, отменить, выполнить. Исходим из этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:31:26 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
ЗЫ. В 1С над документом есть процесс - Журнал документов. Где проводки выстраиваются по очереди. Так что не надо вырывать разговор о мелком из большого. Если вырывать, то нет проблем - Вам сказали - выкинуть хибер и на ODBC делай что хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:33:11 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, Petro123Итак, чем кассир отличается от пользователя? Полномочиями, я не делаю продажу жд билетов или вообще билетов, почему вы в пример приводите мне то, чего у меня и близко нет? ==== дак найдите аналог из жизни! У вас нобелевская? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:35:05 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, я перестаю вас понимать совершенно. Ничего я ниоткуда не вырываю. Зачем нужен пример из жизни? я привел четкий, пусть и нереальный пример, написал что я хочу получить, как я хочу это получить. Я сознательно не лезу ни во что другое (журналы проводок, блокировку ресурсов, юзабилити) только потому, что меня интересует отдельный конкретный вопрос, и ничего больше. Я вижу от вас все что угодно кроме ответа на него, не считая этого: Petro123ЗЫ. В 1С над документом есть процесс - Журнал документов. Где проводки выстраиваются по очереди. Так что не надо вырывать разговор о мелком из большого. Если вырывать, то нет проблем - Вам сказали - выкинуть хибер и на ODBC делай что хочешь. Делай что хочешь это мощно, я две страницы исписал тем чего я хочу, я не знаю КАК это сделать. Да фиг с ним ,пусть будет Процесс . Начинаться он будет с заполнения заявки - заканчиваться выполненной заявкой. состояний будет несколько: 1.Новая заявка (не сохранена и не выполнена) 2.заявка сохранена но не выполнена 3.заявка сохранена и выполнена возможные варианты: 1-2,2-3,3-2 за переход между вариантами отвечает один метод process(), на вход которому я даю заявку и указываю что с ней делать (сохранить, выполнить, отменить). Метод process() делает одну вещь всегда - сохраняет заявку, а другую вещь (выполнить/отменить) делает только если его попросить об этом. Как мне завернуть каждый переход из состояния в состояние в отдельную транзакцию? это все что я хочу знать, ничего мне больше не нужно. Если пошла аналогия с 1с, то мне нужен функционал , аналогичный сохранению документа с указанием режима проведения. И ничего больше, никаких журналов,проводок,последовательностей. В 1с это в транзакции, мне тоже надо в транзакции и все, только это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:10:11 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerя перестаю вас понимать совершенно:) пётр на седьмом уровне, ты пока ещё на третьем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:11:59 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Petro123 автор ААААА!!!!! -мне результат нужен, мне безуууумно нужен результаааат. НО, если получить его я не могу, я хочу чтобы исходные данные остались в форме и все. Чтобы я мог открыть ее потом, и попробовать получить результат снова, не вводя никаких больше данных IMHO это - ерунда Ну значит вся 1с ерунда. Я менеджер, мне надо отгрузить со склада какую-то продукцию, я пытаюсь это сделать, 1с дает отлуп - нет товара в наличии, я сохраняю документ, звоню клиенту и говорю что товара нет в наличии. На следующий товар привозят, я открываю тот же самый документ и вуаля, все отгружено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:13:26 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
grasoff.net, а вы на каком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:15:18 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
grasoff.netjavapeckerя перестаю вас понимать совершенно:) пётр на седьмом уровне, ты пока ещё на третьем угу))) - он не в курсе, что архитектура - это выбор лучшего из 1000 вариантов. - это значит, что решать "для коня в вакууме" невозможно. Это imho )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:16:38 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, вы издеваетесь? какой конь? что непонятного с этими гребаными конфетами? что еще надо дописать к ним, чтобы вы предложили вариант? или про ТЗ это была не шутка? даже если и так, они изложено, пусть и не в формальном виде. Да даже и не прошу я уже вариант, я спрашиваю уже целую страницу про один несчастный метод и транзакцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:22:19 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, да не расстраивайся, это мы про своё с grasoff.net. ... я же не мешаю никому писать тут решение. Лично я не могу строить модель данных для твоих Детолюбов. ..... Счас попробую транзакцию написать...погоди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:28:20 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, я действительно расстраиваюсь, потому что не вижу разницы с точки зрения построения архитектуры между реальным примером, который будет загроможден кучей лишних специфичных для предметной области вещей, и выдуманным примером, который четко отражает суть того что нужно сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:33:29 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, - разница есть "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. Вот абстрактно ОДНА транзвкция = ОДИН метод. Причём TransactionAttribute выполняется доли секунды. И желательно (для веб) чтобы вся БИЗНЕС транзакция вошла в этот метод. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. т.е. пихаешь всё что нужно в эти методы внутри. Модель данных мне сложно делать на космос. На то она и МОДЕЛЬ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:41:32 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Спасибо, у меня к сожалению нет контейнера, чтобы использовать @TransactionAttribute(TransactionAttributeType.REQUIRED). Есть JAVA, есть Hibernate, есть мой долбаный метод, убираю свое требование(сохранение заявки в любом случае, даже если выполнение отвалилось) То есть метод = транзакция, откат = вернуть все как было. То есть по функционалу нужно ровно то же что вы написали - но имея только то что у меня есть. Petro123Модель данных мне сложно делать на космос. На то она и МОДЕЛЬ. а если не на космос то сделаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 12:56:09 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, - без контейнера ещё проще. Контейнер равен обёртыванию в try. начни отсюда: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. - если не на космос, то да: выбирай http://www.databaseanswers.org/data_models/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 13:01:11 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, я пишу длинные посты, поэтому вы их не читаете. Естественно я знаю, как сделать это имея хибернейт согласно с вашим примером. Но я писал везде раньше, что не хочу использовать прямой вызов методов хибернейта - мешать логику с реализацией персиста, хочу прослойку, и мои методы как раз похожи на ваши из примера: Код: java 1. но не используя контейнер, как я понимаю транзакция начнется в этом методе и там же закончится. в этом проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 13:16:28 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Petro123- если не на космос, то да: выбирай http://www.databaseanswers.org/data_models/ ох блин, тут целый день выбирать можно и не выбрать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 13:38:52 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, я пишу длинные посты, поэтому вы их не читаете. Естественно я знаю, как сделать это имея хибернейт согласно с вашим примером. Но я писал везде раньше, что не хочу использовать прямой вызов методов хибернейта - мешать логику с реализацией персиста, хочу прослойку, и мои методы как раз похожи на ваши из примера: Код: java 1. но не используя контейнер, как я понимаю транзакция начнется в этом методе и там же закончится. в этом проблема. нет, я читаю, и помню, и у меня хорошая память. Просто я ответ отложил на потом (модель важнее). Ответ - мешать логику с реализацией персиста - можно. Тут (в вебе) много споров, но ничего страшного в этом нет. Т.к. нет ничего "чистого" - всегда компромисс между оверхедом и простотой. imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 14:13:00 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerох блин, тут целый день выбирать можно и не выбрать. и правильно. Тут целый форум про проектированию модели рядом. (В Java маппинг всё равно ложится на эту модель). Просто Jav'исты проще видят в коде, чем в диаграммах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 14:15:12 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerтранзакция начнется в этом методе и там же закончится. в этом проблема. не совсем. Есть транзакции вложенные. Сами СУБД это поддерживают. ОРМ, как прослойка - не поддерживает. И везде написано, что транзакции - как можно короче. Когда хибер сбросит кеш в СУБД - это Commit. Поэтому для заказов и хранения состояния заявки делают всякие галки в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 14:19:43 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
совет - плюнь на красоту и сделай транзакции при конкурентном доступе к конфетам от 10000 пользователей. Если у тебя не препод дал задачу. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 14:21:32 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckergrasoff.net, а вы на каком?на первом, он у меня и последний ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 14:29:10 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
На красоту мне плевать. просто логика вряд ли изменится, а вот персист может и должен совершенствоваться. я просто не хочу при этом лезть и менять что-то в логике. это неправильно. Вдруг хибернейт начнет проводить опыты на кроликах, разумеется я сразу забью на него и приду к другому провайдеру, и мне придется лезть только в классы, оборачивающие персист, но никак не в мой многострадальный process(). про субд и вложенные транзакции мне хорошо известно. и про то что орм их не поддерживает - тоже. Но вот я проглядел первый же ответ в теме: BlazkowiczСессии и транзакции это не одно и тоже. Всегде можно обойтись без прямого доступа через менеджер и привязку к потокам. А управление транзакциями это вообще одна из задач бизнес-логики. сессии и транзакции понятно что не одно и то же, а вот вторую часть предложения пожалуйста поясните, я не догнал пока как это реализовать, кажется это именно то что мне нужно. Примерно представляю так: обеспечить чтобы каждый мой сервисный метод типа MyPersist.save(MyEntity) использовал текущую сессию, и транзакцию открытую в этой сессии, вместо того чтобы начинать новую. Но тогда у меня появятся некоторые методы, способные начать новую транзакцию, и методы, лишенные такой возможности. Я сейчас возможно хрень написал, но она хотя бы рядом со смыслом цитаты или вообще далеко? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 15:17:51 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, авторНа красоту мне плевать. просто логика вряд ли изменится, а вот персист может и должен совершенствоваться это выше совершенно непонятно. Подкрепите кодом. Про текущую сессию - проблема. Вы можете управлять транзакциями (декларативно или через try) только в рамках сессии сервлета . А эта сессия равна сессии хибер . Так что у вас всего надцать миллисекунд чтобы управлять )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 15:27:04 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerа вот вторую часть предложения пожалуйста поясните, я не догнал пока как это реализовать, кажется это именно то что мне нужно https://www.google.com/search?q=Declarative+Transaction+Management ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 15:27:26 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, ой, проглядел Petro123нет, я читаю, и помню, и у меня хорошая память. Просто я ответ отложил на потом (модель важнее). Ответ - мешать логику с реализацией персиста - можно. Если нет понятного и элегантного способа не мешать (без контейнера), то конечно буду мешать. Я просто надеялся что такой способ есть. Насчет взглядов со стороны базы или кода, тут тоже полно нюансов. Не зная как может и как не может мапить хибернейт, можно облажаться с плясками от базы. А если начать от кода, можно получить на выходе монстра в базе. У меня получилось лажануться с обеих сторон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 15:43:06 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, - да приведи ты кодом, что именно в строке кода - не нравится. - да. В Java есть ОРМ, и желательно знать обе стороны. Хотя есть полно сторонников, что БД вторичный импотент в Java) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 15:51:25 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Petro123это выше совершенно непонятно. Подкрепите кодом. ну ваш же код Petro123import org.hibernate.Session; import ru.javatalks.faq.persistence.hibernate.bookstore.Book; import ru.javatalks.faq.persistence.hibernate.util.HibernateUtil; public class Main { public static void main(String[] args) { Session session = HibernateUtil.getSessionFactory().openSession(); Book book = new Book(); book.setPageCount(520); book.setTitle("Tales of Round Table"); session.save(book);//сохранили книгу, наш id сгенерировался и сразу заполнился book = (Book) session.get(Book.class, book.getId()); book.setPageCount(430); session.save(book); session.delete(book); session.flush(); session.close(); } } Придется менять, если вы вдруг решите использовать не хибернейт, а если бы там были обернутые методы, то менять бы не пришлось. например, если бы было так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Но тут, к сожалению никак не впихнуть весь мэйн в одну транзакцию. Petro123 Вы можете управлять транзакциями (декларативно или через try) только в рамках сессии сервлета Мне бы хоть для десктопа решение найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 16:02:55 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerМне бы хоть для десктопа решение найти. Spring ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 16:08:26 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, - обернуть можно всё, даже Хибер (вместо Session написать MyPersist) , ведь хибер - обычный класс. Только вот Локика кода сильно завязана на ОРМ\не ОРМ, Десктоп\Веб и т.д. авторМне бы хоть для десктопа решение найти. чтобы ОРМ менять как перчатки - иллюзия. Может тебе и ОРМ не нужен? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 16:13:12 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, да нужен, хотя бы чтоб руками не мапить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 17:11:31 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, вообщем или мешать логику/персист или использовать контейнер/спринг. так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 17:12:29 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 17:13:54 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, вообщем или мешать логику/персист или использовать контейнер/спринг. так? так)) Мы уже обсуждали этот вопрос с Blazkowicz. Он профи в этом вопросе. Будет ли код проще _для тебя_ с использованием спринг - вопрос личный и неоднозначный. Лучше знать оба варианта. Я у тебя не увидел мешанины из-за замены Session на MyPersist (сессия потокоозащищённый объект) Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 17:25:14 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, вообще, сделай наглядный пример, и выложи. Раз 3 страницы понаписал. Ждёмс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 17:31:06 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, базу или код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 18:38:36 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, Ты же сам просил все сразу))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 21:54:19 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
А можно минимальное тз с критичными хотелками?:) Я то вы обсуждаете по моему каких то абстракции ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2012, 11:45:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2131140]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
126ms |
get tp. blocked users: |
2ms |
| others: | 296ms |
| total: | 498ms |

| 0 / 0 |
