DWR/OpenSessionInView “Сеанс закрыт!” в Java и спящем режиме

StackOverflow https://stackoverflow.com/questions/1807164

  •  05-07-2019
  •  | 
  •  

Вопрос

Они говорят, что закрытый сеанс в 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>

Но даже при этом я получаю исключение гибернации "Сеанс закрыт" при попытке использовать API критериев гибернации, поэтому я попробовал другой способ spring, используя 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, поэтому я очень ценю вашу помощь.

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

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top