0

WAS8 で実行されている Spring+Hibernate+JDBC でユーザー リクエスト中にセッションが閉じるという散発的な問題が発生しています。それは以前に発生し、消え去りましたが、今では常にランダムに頭をもたげています。これがアプリケーションの問題ではないことを確認したいので、管理者に質問して、アプリケーションの問題ではないと正しく言えます。他の誰かがこの問題を経験したかどうかにも興味があります。

  • 春: 3.2.2
  • 休止状態: 4.1.12
  • ウェブスフィア: v8

まず、私の仮定をリストします。私の理解では、WAS はデータソースの接続プールを処理します。これらのプールから、hibernate/spring リクエスト接続は、それを実行するための独自の論理接続を作成します。次に、接続/セッションを「閉じる」ときに、物理接続は閉じませんが、接続を実際に閉じる必要がある場合を処理するプールに解放します。

アプリケーション内のすべてのトランザクションは @Transactional アノテーションを使用し、場合によっては読み取り専用を使用します。DAO のスーパー クラスにアクセスし、セッションを取得するときに を@Autowired呼び出します。 SessionFactorysessionFactory.getCurrentSession()

Bean 定義コード:

<bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
    <property name="targetDataSource">
        <ref local="wasDataSource" />
    </property>
</bean>

<bean id="wasDataSource" class="org.springframework.jdbc.datasource.WebSphereDataSourceAdapter">
    <property name="targetDataSource">
        <bean class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="java:comp/env/jdbc/HostDS" />
        </bean>
    </property>
    <property name="isolationLevel">
        <bean class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
            <property name="staticField">
                <value>java.sql.Connection.TRANSACTION_READ_UNCOMMITTED</value>
            </property>
        </bean>
    </property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="entityInterceptor">
        <bean class="com.***.intranet.inp.model.AuditTrailInterceptor" />
    </property>
    <property name="annotatedPackages">
        <list>
            <value>com.***.intranet.inp.model</value>
        </list>
    </property>
    <property name="packagesToScan">
        <list>
            <value>com.***.intranet.inp.model</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.default_schema">${db.schema}</prop>
        </props>
    </property>
</bean>

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

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

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


hibernate.propertiesファイルコード:

hibernate.dialect = com.***.intranet.inp.hibernate.DB2ZosDialect<br>
hibernate.cache.region.factory_class = org.hibernate.cache.EhCacheRegionFactory<br>
hibernate.cache.use_second_level_cache = true<br>
hibernate.cache.use_query_cache = true<br>
hibernate.connection.pool_size = 30 (matches the datasource pool size)
4

1 に答える 1

0

この問題は、ソケット接続の問題を引き起こしていた DB2 に適用されているフィックスパックに関係していることが判明しました。DBA はそれをロールバックするか、修正の修正を見つけました。現在、問題は発生していません。

私はstackoverflowが初めてなので、今何をすべきかわからない。スレッドか何かを閉じますか?わからない。

于 2013-06-07T23:19:12.940 に答える