DWR / OpenSessionInView“セッションが閉じられました!” JavaおよびHibernateで

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

  •  05-07-2019
  •  | 
  •  

質問

彼らは、休止状態とajaxを使用したwebappでの閉じたセッションはjavaとspringの一般的な問題であると言うので、web.xmlでOpenSessionInViewInFilterをこのように設定する必要があります

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

しかし、それでも、「セッションは終了しています」というメッセージが表示されます。 Hibernate Criteria apiを使用しようとするとhibernate例外が発生するため、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">

               

同じ&quot;セッションは閉じられています&quot;問題。ここで私を助けてください。私はJavaが初めてなので、あなたの助けは大歓迎です。

現在、Mavenのjettyプラグイン、バージョン6.1.10。内で実行しています

役に立ちましたか?

解決

異なるスレッド間でデータを渡さないようにしてください。これは、遅延読み込みを使用する場合に特に簡単です(休止状態のマッピングのデフォルトを確認してください)。

エンティティYが遅延読み込みされ、エンティティHから(Hibernate経由で)参照され、あるスレッドから別のスレッドにXを渡し、この別のスレッドでx.getY()を実行すると、問題が発生します。

他のヒント

それを見つけました。サービスクラスで@Transactionalを宣言する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top