1

Spring、Hibernate、および JSF に基づく Web アプリケーションに取り組んでおり、以前に何度か議論された既知の問題に直面しています。下記参照 :

17:42:11,970 エラー [STDERR] 11 月 7 日 2012 17:42:11 javax.faces.component.UIInput updateModel GRAVE: createProjectForm:projectStatus: 送信された情報の処理中にエラーが発生しました。17:42:11,972 INFO [STDOUT] 17:42:11 エラー org.hibernate.LazyInitializationException はプロキシを初期化できませんでした - セッションがありません(AbstractLazyInitializer.java:57) at org.hibernate.proxy.pojo.BasicLazyInitializer.invoke(BasicLazyInitializer.java:75) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:160) at com. company.entity.TLsta_$$_javassist_6.setLStat(TLsta_$$_javassist_6.

次の解決策を試しましたが、成功しませんでした:(:

  • OpenViewInSession フィルター
  • @Transactional アノテーション
  • Hibernate.initialize(オブジェクト)

私の問題は、現在の Hibernate セッションを取得できなかった JSF に関連していると思いますが、これを解決する方法がわかりません。

私は使用しています:

  • JSF1.2
  • リッチフェイス 3.3.2
  • 春 2.5
  • 休止状態 3.2.5
  • JBoss 4.2

私の設定ファイルとソースコードの下を見つけてください:

web.xml

<!-- Hibernate filter -->
<filter>
  <filter-name>hibernateFilter</filter-name>
  <filter-class>
      org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  </filter-class>
  <init-param>
      <param-name>sessionFactoryBeanName</param-name>
      <param-value>sessionFactory</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>hibernateFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

<!-- Security --> 
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<!-- jsf listener -->
<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

<!-- spring listener -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-  class>
</listener>
<listener>
    <listener- class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<!-- jsf servlet -->
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

<!-- RichFaces login -->
<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

ApplicationContext.xml

<!-- DataSource -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:oracleDS</value>
    </property>
</bean>

<!-- Session Factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource"/>
    </property>
    <property name="mappingLocations" value="classpath:*.hbm.xml" />

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            <prop key="hibernate.show_sql">false</prop>
        </props>
    </property>
</bean>

 <!-- Generic DAO -->
<bean id="genericDAO" class="com.company.dao.GenericDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="txManager"/>

<bean id="genericManager" class="com.company.services.GenericManagerImpl">
    <property name="dao" ref="genericDAO"/>
</bean>

<context:component-scan base-package="com.company">
    <context:include-filter type="regex" expression="com.company.beans.projectdirectory.Maintain*"/>
    <context:include-filter type="regex" expression="com.company.beans.projectdirectory.services.ProjectDirectoryManager"/>
    <context:include-filter type="regex" expression="com.company.beans.app.*"/>
</context:component-scan>
<context:annotation-config />

エラーの原因となったプロパティへのアクセスがある Create.xhtml :

<rich:comboBox value="#{createProjectBean.project.TPsta.PStat}"id="projectStatus" selectFirstOnUpdate="false"  width="145"
required="true" requiredMessage="#{msg.CMP_requiredPrjStatusError}">
<f:selectItems  value="#{createProjectBean.projectStatusOptions}" />
</rich:comboBox>

どうすればいいですか?

4

1 に答える 1

0

「アプリケーションの呼び出し」フェーズの前に発生する「UpdateModelValuesPhase」でこの例外が発生したようです。「アプリケーションの呼び出し」フェーズでは、通常、ほとんどの処理を行います。

openSessionInView フィルタを使用しているにもかかわらずこの例外が発生する場合は、前のリクエストでプロキシをロードしたが、現在のリクエストでプロキシにアクセスしようとしている可能性があります。プロキシは閉じられた古いセッションに関連付けられているため、LazyInitialization 例外が発生します。

于 2012-11-08T17:21:08.450 に答える