Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние? / 25 сообщений из 169, страница 1 из 7
13.01.2012, 15:50:39
    #37613337
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Собственно сабж.
- в 2-х звенке (или БЛ в СУБД) это делается элементарно.
- есть ли аналог SpringMVC - SpringСостояние? Мне второй важнее
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
13.01.2012, 15:55:27
    #37613354
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Чего состояние хранить? Объекта? Так его на pure Java можно клонировать либо сериализовать. Что под "Состоянием" понимать?
...
Рейтинг: 0 / 0
13.01.2012, 15:58:36
    #37613367
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Blazkowicz,
ТЗ я перекупил у автора
/topic/905874&hl=
и могу его корректировать.
- в 2-х словах - сложные составные объекты с ленивой загрузкой.
Аналог отвязанного DataSet\\ClientDataSet\\Xiber_ClientCashe
...
Рейтинг: 0 / 0
13.01.2012, 16:00:24
    #37613372
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
т.е. нивелируем недостатки
Session-Per-Request
т.к. это устарело и не соответствует
Session-Per-View (десктоп)
...
Рейтинг: 0 / 0
13.01.2012, 16:13:19
    #37613411
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
svenom...... В общем, понял я вашу проблему. Есть два решения . Одно умное, правильное, но геморное. Второе топорное, кривое, но быстрее.
Изначально проблема заключается в том, что вы пытаетесь переложить на сессию Хибера то, для чего она не предназначена. А именно - поддержание состояния работы пользователя между запросами. Так вот, этим должна заниматься не сессия Хибера, а сессия сервелета, а логика поддержания этого состояния должна поддерживаться вами вручную.
1) Правильное решение - писать код самому, который будет отслеживать изменения пользователя. Это будут скорее всего тупо POJO с минимумом логики и в основном геттерами - сеттерами. В итоге - для всех операций пользователя вы будете только считывать данные из БД, то есть открыли сессию Хибера, быстро считали, закрыли. И лишь последним действием - сохранением - вы переносите все изменения из сессии сервлета в сессию Хибера и комитите их.
2) Дерьмовое решение - полезть в непубличный API Хибера. То есть берете сессию, кастите ее до SessionImpl и начинаете копаться в потрохах Хибера. Примеры: а) вызвать sessionImpl.gtPersistenceContext() и порыться там; б) вызвать sessionImpl.getActionQueue(), потом через рефлекшн получить значения закрытых полей insertions/deleteions/updates и что-нибудь замутить с ними; в) вызвать sessionImpl.getListeners() и выставить своих листенеров на события.
Но учтите, что пойдя вторым путем, вы испортите свою карму, совершив акт говнокодерства. Еще несколько таких проступков - и бессмертный дух говнокодерства поработит вас .........
...
Рейтинг: 0 / 0
13.01.2012, 16:15:37
    #37613417
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
svenom,
самому писать, да без генераторов, только в крайнем случае.... с отвращением.

Вариант2 ещё хуже.

Пока ищу решение, а то нет оснований убирать БЛ из БД для корпоратива.
...
Рейтинг: 0 / 0
13.01.2012, 16:18:38
    #37613428
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
правильно я понял, что Хибер-ОРМ не поможет, спринг и АппСервер тоже?
Если включить ручной flush и хранить там копии объектов тоже нельзя?
...
Рейтинг: 0 / 0
13.01.2012, 16:19:01
    #37613429
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Нет такого решения. Нужно просто нормально сегментировать данные. Вот пользователь работает с некоторой выборкой. Мы ему загрузили её всю на desktop, дали с ней игратся сколько ему влезет. И сохранили целиком.
В чем смысл сохранять её по частям? Проблема автора в указанном топике в том что нужно сохранить объект, не сохраняя его.

Вопрос зачем? Он уже есть в памяти. Зачем помещать его в Hibernate Session, не желая сохранения в базу???
...
Рейтинг: 0 / 0
13.01.2012, 16:24:46
    #37613449
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Petro123правильно я понял, что Хибер-ОРМ не поможетПравильно, он для этого и не предназначен.
Petro123спринг и АппСервер тоже?Неправильно, Спринг и АппСервер к проблеме отношения не имеют в принципе.
Petro123Если включить ручной flush и хранить там копии объектов тоже нельзя?Нельзя.
...
Рейтинг: 0 / 0
13.01.2012, 16:24:50
    #37613450
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
BlazkowiczНужно просто нормально сегментировать данные.

======== если модель, то она есть

Вот пользователь работает с некоторой выборкой.

===== у него бизнес-сущность как в десктопе на 5 вкладках "Персона+ПриказНаДолжность+Оклад"

Мы ему загрузили её всю на desktop,

======= всю нельзя - ленивых куча.

Вопрос зачем? Он уже есть в памяти. Зачем помещать его в Hibernate Session, не желая сохранения в базу???

==== нужно простое - подгрузка в несколько сессий как на десктопе. И кнопка - ОК\Отмена
...
Рейтинг: 0 / 0
13.01.2012, 16:25:45
    #37613453
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
svenom,
Спринг к MVC тоже не имеет отношения.
...
Рейтинг: 0 / 0
13.01.2012, 16:26:51
    #37613456
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
svenomПравильно, он для этого и не предназначен.
Нахрен мне такая 3-х звенка, если ни к чему не имеет отношения?
...
Рейтинг: 0 / 0
13.01.2012, 16:32:18
    #37613473
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Petro123svenomПравильно, он для этого и не предназначен.
Нахрен мне такая 3-х звенка, если ни к чему не имеет отношения?Вы просто не умеет ее готовить (с)
...
Рейтинг: 0 / 0
13.01.2012, 16:34:26
    #37613479
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
svenomВы просто не умеет ее готовить (с)
ну как же, я пробовал твой рецепт:
svenomПравильное решение - писать код самому
не вкусно :)
...
Рейтинг: 0 / 0
13.01.2012, 16:37:10
    #37613490
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Petro123======= всю нельзя - ленивых куча.

Все ленивые догружаются с сервера, когда они нужны. Не нужны - не догружаются - не апдейтятся.
...
Рейтинг: 0 / 0
13.01.2012, 16:39:44
    #37613499
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
BlazkowiczPetro123======= всю нельзя - ленивых куча.

Все ленивые догружаются с сервера, когда они нужны. Не нужны - не догружаются - не апдейтятся.
тогда не пойму - есть проблемы и надо руками? Или нет проблем особых
Сессия Hiber на Сессию HTTP
Откат будет работать?
...
Рейтинг: 0 / 0
13.01.2012, 16:40:30
    #37613502
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
пока такие варианты:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
ТЕХНОЛОГИИ ДЛЯ ДЛИННОЙ БИЗНЕС ТРАНЗАКЦИИ
=========================================

1. Длинная в БД хоть до вечера
--------------------------------
- хибер может не поддерживать
- ничего писать не надо, всё обеспечивает БД


2. Короткая в БД и длинная Бизнес
--------------------------------
- хибер поддерживает через - метка + сессия-на-запрос-с-несвязанными-объектами
- нужно создать поле счётчик или метку
- хибер сам заполняет с учётом наследования\грязности
- нужно самому обрабатывать ошибки от хибера связанные
  с логической блокировкой

Вы можете загрузить интересующие объекты в первой сессии, а затем 
связать их к новой сессии после того, как они были изменены пользователем.  
Hibernate автоматически проверит версию. 
Время между (S1, T1) и (S2, T2) может быть «длинным», настолько длинным, 
насколько это нужно пользователю, чтобы сделать его изменения. 

По умолчанию, load() и get() используют LockMode.NONE. LockMode.READ является наиболее полезным с Session.lock() и несвязанным объектом. Например:
      Item item = ... ;
      Bid bid = new Bid();
      item.addBid(bid);
      ...
      Transaction tx = session.beginTransaction();
      session.lock(item, LockMode.READ);
      tx.commit();
Этот код выполняет проверку версии на несвязанном Item для проверки того, что 
строка БД не обновлена другой транзакцией с момента её извлечения, 
перед сохранением нового Bid каскадно (предполагая, что каскадная ассоциация 
от Item к Bid разрешена).
   

3. Короткая в БД и длинная Бизнес (сессия-на-транзакцию-приложения или длинная сессия)
--------------------------------
"Кроме того, вы можете предпочесть использовать одну сессию, которая 
охватывает несколько запросов вашей транзакции приложения. 
В этом случае, вам не нужно беспокоиться о присоединении несвязанных объектов, 
так как объекты остаются хранимыми в рамках одной длительной сессии
Сессия сериализуемая и может быть безопасно сохранена, например, 
в сервлете HttpSession. 
Конечно, базовое JDBC соединение должно быть закрыто и новое 
соединение должно быть получено на следующий запрос. 
Вы используете методы disconnect() и reconnect() интерфейса 
сессии для того, чтобы освободить соединение и затем получать новое 
соединение. 
Такое подход известен, как сессия-на-транзакцию-приложения или длинная сессия."
...
Рейтинг: 0 / 0
13.01.2012, 16:43:55
    #37613512
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Petro123,

в рамках MVC ваше состояние - это Pure M. Новость?:)
...
Рейтинг: 0 / 0
13.01.2012, 16:49:40
    #37613523
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Petro123BlazkowiczВсе ленивые догружаются с сервера, когда они нужны. Не нужны - не догружаются - не апдейтятся.тогда не пойму - есть проблемы и надо руками? Или нет проблем особых
Сессия Hiber на Сессию HTTP
Откат будет работать?Каша в голове. Повторюсь - Хибер не решает эти проблемы, он для этого не предназначен, ни кеш первого уровня, ни кеш второго уровня. Состояние между HTTP запросами поддерживает сессия сервлета. Но в ней, разумеется, нет никаких готовых структур данных, это тупо Map. Точка, закрывайте тему.
...
Рейтинг: 0 / 0
13.01.2012, 16:52:20
    #37613529
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
Petro123тогда не пойму - есть проблемы и надо руками? Или нет проблем особых

Я уже задал вопрос выше. Не понятна постановка задачи. Для чего мне сохранять какое-то состояние, но не сохранять в базу?
У меня на десктопе уже есть эти сущности. У них уже есть своё состояние. Для чего мне хранить это состояние вне сущностей?

Petro123Сессия Hiber на Сессию HTTP
Hibernate Session долгоиграющим может быть только теоретически. На практике он на это не способен. Но если гипотетически можно и так. Пишем в долгую сессию. Флашим. Пересоздаём сессию переодически.

Petro123Откат будет работать?
AFAIK, Транзакция и Hibernate Session могут работать в разных комбинациях: 1-1, 1-n, n-1
...
Рейтинг: 0 / 0
13.01.2012, 16:58:55
    #37613539
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
BlazkowiczЯ уже задал вопрос выше. Не понятна постановка задачи. Для чего мне сохранять какое-то состояние, но не сохранять в базу?
У меня на десктопе уже есть эти сущности. У них уже есть своё состояние. Для чего мне хранить это состояние вне сущностей?
тогда давайте по простому:
Заказчик - Заказы. В ослике 1 ко многим.

ВИ1

CRUD
C - 3 заказа
U - 2 заказа
D - 1 заказ
U - у одного заказа ленивое количество и адрес (U для адреса)

Будет работать и ОК Отмена из нескольких реквестов?
...
Рейтинг: 0 / 0
13.01.2012, 17:00:26
    #37613543
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
в десктопе я держал сессию-коннект на всю жизнь приложения.
Здесь надо хотя бы между реквестами - на сессию. Что равносильно на жизнь :)
...
Рейтинг: 0 / 0
13.01.2012, 17:02:00
    #37613546
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
BlazkowiczПишем в долгую сессию. Флашим. Пересоздаём сессию переодически.
вот это вроде выше вариант 2 или 3?
Тут надо копать.
...
Рейтинг: 0 / 0
13.01.2012, 17:11:00
    #37613567
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
svenomНо в ней, разумеется, нет никаких готовых структур данных,
готовая структура (копия БД) в кэше втором.
Но ты сказал её не выйдет.
Ещё пихать всё что отдал в респонс в сессию HTTP.
Тут не знаю, тоже надо копать.
...
Рейтинг: 0 / 0
13.01.2012, 17:13:26
    #37613572
slippery
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние?
я более подробно описал задачу по которой пошел разговор в данном топике, а также откомментировал вариант решения который предлагался. смотреть 3 моих последних сообщения
/topic/909083&pg=3

на всякий случай кидаю сюда ссылку, так как вещи связанные, если нужно по другому сделать вставку, скажите как?)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние? / 25 сообщений из 169, страница 1 из 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]