DWR / OpenSessionInView "Сессия закрыта!" в Java и Hibernate - PullRequest
0 голосов
/ 27 ноября 2009

Говорят, что закрытый сеанс в hibernate и webapp с ajax - общая проблема с java и spring, поэтому мне нужно установить OpenSessionInViewInFilter в web.xml следующим образом

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>    
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext.xml
    </param-value>
</context-param>
<filter>
    <filter-name>springFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>springFilter</filter-name>
    <url-pattern>/dwr/*</url-pattern>
</filter-mapping>

Но даже при этом я получаю исключение гибернации "Session is Closed", когда пытаюсь использовать API Hibernate Criteria, поэтому я попробовал другой весенний способ, используя OpenSessioninViewInterceptor

<bean id="urlMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="alwaysUseFullPath" value="false"/>
     <property name="mappings">
            <props>
                <prop key="*">dwrController</prop>
            </props>
    </property>
    <property name="interceptors">

и перехватчик

<bean id="openSessionInViewInterceptor"class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">

Та же проблема "Сессия закрыта". Пожалуйста, помогите мне здесь. Я новичок в Java, поэтому ваша помощь очень ценится.

В настоящее время я работаю в плагине maven's jetty, версия 6.1.10.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2009

Нашел это. Мне нужно объявить @Transactional в моем классе обслуживания.

0 голосов
/ 27 ноября 2009

Убедитесь, что вы не передаете данные в разные потоки. Это особенно легко, если вы используете ленивую загрузку (проверьте настройки отображения по умолчанию в спящем режиме).

Скажем, если объект Y загружен лениво и на него ссылаются из объекта X (через Hibernate), и вы передаете X из одного потока в другой, и в этом другом потоке вы выполняете x.getY (), у вас проблемы.

...