0

JPA (Hibernate)、Spring、およびCXFに基づく Web サービス アプリケーションがあります。トランザクション ビジネス メソッドの後でいくつかの遅延読み込み例外に直面しています (rpesentation レイヤーでレンダリングする追加の Bean が必要なため)。OpenSession/ EntityManagerInViewパターンを試してみたいと思いました。

この選択について異議を唱えないでください。私たちはただ試しているだけです。

問題は、標準の Spring Servlet の代わりにCXFServletを使用しているため、web.xml でOpenEntityManagerInViewFilterを使用できないことです。

WebRequestインターセプターとして適用されるOpenEntityManagerInViewInterceptorを使用できません(CXFインターセプター/フィルターでは機能しません)。

最後に、任意のメソッドをセッションにラップする AOP プロキシであるHibernateInterceptorを認識しています。それでも、これは JPA API ではなく Hibernate API 用です (私はSessionFactoryではなくEntityManagerFactoryを使用しています)。

それで、あなたはどちらかを知っていますか:

  • JPA APIのHibernateInterceptor ( EntityManagerInterceptor ?)
  • Spring WebRequestInterceptorJAX-RSfilterに適合させる方法は?
  • 他の解決策はありますか?

よろしくお願いします。

4

1 に答える 1

0

もう一度、私はついに私が望んでいたものを見つけました...実際に私が望むことを行うJpaInterceptorがあります(ただし、非推奨のようです。理由はよくわかりません)。

これは、名前による自動プロキシを少し使用して、魅力的に機能する結果の構成です。

   <bean id="jpaInterceptor" class="org.springframework.orm.jpa.JpaInterceptor"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
   </bean> 

   <bean id="jpaAutoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" >
    <property name="beanNames">
      <list>
        <value>myService1</value>
        <value>myService2</value>
        <value>...</value>
      </list>
    </property>
    <property name="interceptorNames">
       <list><value>jpaInterceptor</value></list>
    </property>
  </bean>

<jaxrs:server id="services" address="/">

    <jaxrs:serviceBeans>
        <ref bean="myService1" />
        <ref bean="myService2" />
        <ref bean="..." />

    </jaxrs:serviceBeans>
</jaxrs:server>
于 2013-07-24T09:15:13.253 に答える