Question

Ils disent qu’une session fermée en hibernate et une application Web avec ajax est un problème courant avec java et spring, je dois donc définir OpenSessionInViewInFilter dans le fichier web.xml comme ceci

<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>

Mais même avec cela, je reçois le "Session is closed". exception hibernate lorsque j'essaie d'utiliser l'API Hibernate Criteria, alors j'ai essayé une autre méthode de printemps en utilisant 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">

           

et l'intercepteur

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

               

Identique "La session est fermée". problème. S'il vous plaît aidez-moi ici. Je suis nouveau en Java, votre aide est donc très appréciée.

Je cours actuellement dans le plugin jetty de maven, version 6.1.10.

Était-ce utile?

La solution

Assurez-vous de ne pas transmettre les données à différents threads. Ceci est particulièrement facile si vous utilisez un chargement différé (vérifiez vos valeurs de mappage de veille prolongée).

Dites si une entité Y est chargée paresseuse et est référencée à partir de l'entité X (via Hibernate) et que vous passez X d'un thread à un autre et que dans ce autre thread, vous faites x.getY (), vous êtes en difficulté.

Autres conseils

Je l'ai trouvé. Je dois déclarer @Transactional dans ma classe de service.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top