powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Использование Hibernate Serssion в MVC Spring3.
25 сообщений из 76, страница 1 из 4
Использование Hibernate Serssion в MVC Spring3.
    #38219598
Шаров Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу посоветоваться на счёт использования 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. Получается, ошибку сохранения не перехватить :(.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219625
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров Сергей,
1) Загрузить объект
2) Перевести его в состояние detached
3) Положить его в сессию
4) Редактировать сколько угодно
5) Присоединить к сессии и сохранить изменения
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219640
rdm5) Присоединить к сессии и сохранить изменения

Не подскажете, как объект присоединить к сессии для сохранения?
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219641
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищущий Знанияrdm5) Присоединить к сессии и сохранить изменения

Не подскажете, как объект присоединить к сессии для сохранения?
session.saveOrUpdate(detachedObject);
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219689
lvit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmИщущий Знанияпропущено...


Не подскажете, как объект присоединить к сессии для сохранения?
session.saveOrUpdate(detachedObject);
встречный вопрос а почему не session.merge(detachedObject); вы ему не советуете?
просто я думаю на будущее еще нужно ему узнать что такое оптимистическая(@Version) и пессимистическая блокировка!
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219866
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,
в среднем проекте объектов около 500
- не накладно руками всё это делать? Сколько строк кода? Не проще сессию не закрывать?
Об этом и был вопрос автора.
- объект в сессии должен быть VO?
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219897
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lvitrdmпропущено...

session.saveOrUpdate(detachedObject);
встречный вопрос а почему не session.merge(detachedObject); вы ему не советуете?
просто я думаю на будущее еще нужно ему узнать что такое оптимистическая(@Version) и пессимистическая блокировка!
merge - это не присоединение объекта к сессии. Эта операция сначала делает загрузку объекта из базы, и затем меняет значение полей.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219913
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров СергейХочу посоветоваться на счёт использования 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 сессиия ?!

По-умолчанию - да. Что и является основным затыком. Скорее всего это можно решить. Как именно - не скажу.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219916
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123rdm,
в среднем проекте объектов около 500
- не накладно руками всё это делать? Сколько строк кода? Не проще сессию не закрывать?
Об этом и был вопрос автора.
- объект в сессии должен быть VO?
VO - это валуе объект? Я не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219928
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmЯ не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно.
Основных проблем две. 1я - баги. 2я - "шаг влево, шаг вправо - расстрел". Хочется чего-то нестандартного. Готовься упорно бодаться с hibernate.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219942
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrdmЯ не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно.
Основных проблем две. 1я - баги. 2я - "шаг влево, шаг вправо - расстрел". Хочется чего-то нестандартного. Готовься упорно бодаться с hibernate.
Petro123в среднем проекте объектов около 500
У меня на порядок меньше, может поэтому проблем особых нет.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219966
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
//фильтр
public class HibernateFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("Servlet Фильтр init, теперь Сеанс открытия/закрытия для каждого реквеста.");
    }
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
        // Не существует на самом деле никаких явных открытых сессий, 
        // первый вызов HibernateUtil.beginTransaction () в control
        // logic (например, использование случае контроллер / обработчик события)
        // получит текущую сессию.
        try {
            chain.doFilter(request, response);
            HibernateSessionController.commitTransaction();// Завершить любые транзакции, если открыты
        } catch (SessionManagementException sme) {
             log.error(sme);
        } finally { // закрыть по любому
            try {
                HibernateSessionController.closeSession();
            } catch (SessionManagementException sme) {
                 log.error(sme);
            }
        }
    }
    public void destroy() {}
}

//менеджер-класс:
public class HibernateSessionController {
    private static Log logger = LogFactory.getLog(HibernateSessionController.class);
    private static Configuration configuration;
    private static SessionFactory sessionFactory;
    private static final ThreadLocal threadSession = new ThreadLocal();
    private static final ThreadLocal threadTransaction = new ThreadLocal();
    private static final ThreadLocal threadInterceptor = new ThreadLocal();
    // создать Default SessionFactory 
    static {
        try {
            configuration = new Configuration();
            sessionFactory = configuration.configure().buildSessionFactory();
        } catch (Throwable ex) {
            logger.error("Building SessionFactory failed.", ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    /**
     * Returns the SessionFactory used for this static class.
     *
     * @return SessionFactory
     */
    public static SessionFactory getSessionFactory() {
        /* Instead of a static variable, use JNDI:
        SessionFactory sessions = null;
        try {
            Context ctx = new InitialContext();
            String jndiName = "java:hibernate/HibernateFactory";
            sessions = (SessionFactory)ctx.lookup(jndiName);
        } catch (NamingException ex) {
            throw new InfrastructureException(ex);
        }
        return sessions;
        */
        return sessionFactory;
    }

    /**
     * Returns the original Hibernate configuration.
     *
     * @return Configuration
     */
    public static Configuration getConfiguration() {
        return configuration;
    }

    /**
     * Rebuild the SessionFactory with the static Configuration.
     *
     */
     public static void rebuildSessionFactory()
        throws SessionManagementException {
        synchronized(sessionFactory) {
            try {
                sessionFactory = getConfiguration().buildSessionFactory();
            } catch (Exception ex) {
                throw new SessionManagementException(ex);
            }
        }
     }

    /**
     * Rebuild the SessionFactory with the given Hibernate Configuration.
     *
     * @param cfg
     */
     public static void rebuildSessionFactory(Configuration cfg)
        throws SessionManagementException {
        synchronized(sessionFactory) {
            try {
                sessionFactory = cfg.buildSessionFactory();
                configuration = cfg;
            } catch (Exception ex) {
                throw new SessionManagementException(ex);
            }
        }
     }

    /**
     * Retrieves the current Session local to the thread.
     * <p/>
     * If no Session is open, opens a new Session for the running thread.
     *
     * @return Session
     */
    public static Session getCurrentSession()
        throws SessionManagementException {
        Session s = (Session) threadSession.get();
        try {
            if (s == null) {
                logger.debug("Opening new Session for this thread.");
                if (getInterceptor() != null) {
                    if (logger.isDebugEnabled())
                        logger.debug("Using interceptor: " + getInterceptor().getClass());
                    s = getSessionFactory().openSession(getInterceptor());
                } else {
                    s = getSessionFactory().openSession();
                }
                threadSession.set(s);
            }
        } catch (HibernateException ex) {
            throw new SessionManagementException(ex);
        }
        return s;
    }

    /**
     * Closes the Session local to the thread.
     */
    public static void closeSession()
        throws SessionManagementException {
        try {
            Session s = (Session) threadSession.get();
            threadSession.set(null);
            if (s != null && s.isOpen()) {
                if (logger.isDebugEnabled())
                    logger.debug("Closing Session of this thread.");
                s.close();
            }
        } catch (HibernateException ex) {
            throw new SessionManagementException(ex);
        }
    }
}


понятно, что спринг MVC4 молчит по данному вопросу...пока....
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219984
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmVO - это валуе объект? Я не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно.
да.
Сложности с техническими низкоуровневыми вещами, которые должен делать фреймворк:
- следить за транзакциями, сессиями, областями видимости и подгрузкой объектов.
- запихивать в HTTP сессию объекты, не из-за хибера, а только когда надо хранить состояние между HTTP-сессимя-запросами (совсем другая БЛ).
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38219994
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123rdmУ меня на порядок меньше, может поэтому проблем особых нет.
да проблем особых ни у кого нет.
Есть 2 подхода, и ...годы спора и флейма:
- Lazy и контроль всего и вся
- OpenSession in View
Кстати, т.к. нет единого мнения, то это значит - ОБА решения РАБОТАЮТ.
И замечательно, что нет золотой пули.

Я сразу загружаю все необходимые данные(HQL или Criteria), так с LazyException проблем нет. Ведь все необходимые данные для загрузки из базы известны при запросе.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220020
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123rdmVO - это валуе объект? Я не большой специалист, но честно говоря не вижу каких либо сложностей в использовании hibernate, хотя в начале было жутко неудобно.
да.
Сложности с техническими низкоуровневыми вещами, которые должен делать фреймворк:
- следить за транзакциями, сессиями, областями видимости и подгрузкой объектов.
- запихивать в HTTP сессию объекты, не из-за хибера, а только когда надо хранить состояние между HTTP-сессимя-запросами (совсем другая БЛ).
Честно говоря не знаю как прокомментировать) Пока это для меня не очевидно.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220031
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmПока это для меня не очевидно.
14159487
зачем деаттачить объект? Будет код - будет очевидно.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220064
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров Сергей,
Спасибо 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. Но это скорее даже преимущество, чем недостаток.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220095
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz3) Контроллер по id достаёт объект из новой session, что происходит очень быстро и без обращений к БД, см п.1
- В контроллере Бизнес-логика. Он не должен заниматься техническими вещами. Если сессия протухла (устарела, кем-то закрыта, ....), то этим должен заниматься хибер.
- Контроллёр пишет программист руками. Пишет же он аннотацию - @ЕслиНетТранзакцииТоНачатьНовую
- Хибер также должен решать - Merge ему делать или:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
update(), saveOrUpdate(), lock(), replicate() and merge() 
...
if ( session.contains( myEntity ) ) {
    // nothing to do... myEntity is already associated with the session
}
else {
    session.saveOrUpdate( myEntity );
}


ЗЫ.
Мир движется к межсетевому взаимодействию. И если делать (сессия протухла), то делать по человечески - без кода в БЛ.
Как например, сделан TClientDataSet в Delphi ))
IMHO
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220105
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz- Данные полностью читаются из базы только один раз, за все HTTP запросы.
тогда он никогда не увидит данные соседа после коммита.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220122
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220130
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123тогда он никогда не увидит данные соседа после коммита.
Кто-то совсем запутался в архитектурах. Кэш один на сервер. Апдейты соседа его чудесно обновляют. Нет никакого кэша на юзера.
На кластере кеш чудесно реплицируется, так что даже в распределенной системе актуален.
Апдейтов не видно только если сосед, с**а, меняет прямо в базе, мимо сервера.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220134
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz 1) Юзер загружает данные из БД. - данные оседают в Level 2 Cache

есть с level2 одна очень неприятная фича . кстати предложенное решение в багтрекере у меня не работает, либо что-то поменялось с тех пор, либо у меня лыжи не едут. помогает только явное unproxy на все join fetch сущности.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220145
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaесть с level2 одна очень неприятная фича . кстати предложенное решение в багтрекере у меня не работает, либо что-то поменялось с тех пор, либо у меня лыжи не едут. помогает только явное unproxy на все join fetch сущности.
Это неприятная фича Hibernate в целом. Баги, которые никогда не будут исправлены, одна из его особенностей.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220163
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
>Сессия, как и бизнес-транзакция, содаётся на каждый запрос..
== хорошо бы, но топик и Lazy говорит не так.
Проблема есть или её нет?

>Эта аннотация лишь указание котейнеру. А что именно при этом происходит зависит от реализации и конфигурации контейнера. К моему сценарию отношения тоже не имее.
=== сценарий без кода и ответственных за работу. Что обсуждать. Может там 5 000 строк писать надо.
Как было с try{}

>Хибер никому ничего не должен.
==== да)))))

Про кэш ты прав и это ОФФТОП.
...
Рейтинг: 0 / 0
Использование Hibernate Serssion в MVC Spring3.
    #38220183
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Blazkowicz,
>Сессия, как и бизнес-транзакция, содаётся на каждый запрос..
== хорошо бы, но топик и Lazy говорит не так.
Проблема есть или её нет?

У автора проблема в том что он транзакцию и сессию создаёт в DAO, а нужно на уровень выше, но не так глобально, как Open Session In View.

Petro123=== сценарий без кода и ответственных за работу. Что обсуждать. Может там 5 000 строк писать надо.
Как было с try{}
Не знаю о чем ты.

Petro123Про кэш ты прав и это ОФФТОП.
Это не Оффтоп. Автор спрашивает про Session Long Conversation подход. Я показываю почему этот подход не нужен из-за Level 2 Cache.
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 1 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Использование Hibernate Serssion в MVC Spring3.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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