1

spring+tomcatベースのアプリでHibernateの2次キャッシュとしてinfinispanを設定しようとしました。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${hibernate.connection.driver_class}"/>
    <property name="url" value="${hibernate.connection.url}"/>
    <property name="username" value="${hibernate.connection.username}"/>
    <property name="password" value="${hibernate.connection.password}"/>
    <property name="maxActive" value="${hibernate.connection.maxActive}"/>
    <property name="maxIdle" value="${hibernate.connection.maxIdle}"/>
    <property name="minIdle" value="${hibernate.connection.minIdle}"/>
    <property name="maxWait" value="${hibernate.connection.maxWait}"/>
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManager">
        <bean class="com.arjuna.ats.jta.TransactionManager" factory-method="transactionManager"/>
    </property>
    <property name="userTransaction">
        <bean class="com.arjuna.ats.jta.UserTransaction" factory-method="userTransaction"/>
    </property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.example"/>

    <!---->
    <property name="hibernateProperties" ref="db-properties"/>
</bean>

そして、プロパティは次のとおりです。

hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.infinispan.InfinispanRegionFactory

例外が発生します:

Caused by: org.infinispan.CacheException: This is transactional cache but no transaction manager could be found. Configure the transaction manager lookup properly.

トランザクションマネージャールックアップを構成するにはどうすればよいですか?

4

2 に答える 2

1

春の簡単な答えは、(id="sessionFactory"春のXML構成内に)追加することです:

<property name="jtaTransactionManager" ref="transactionManager"/>

これは、春の 3.2.2.RELEASE で利用可能です (春の古いバージョンでも利用できる可能性があります。春の 3.1.x 以降だと思います)。

これは、Steve Ebersole が指摘することを達成するはずです。これにより、Spring はクラスhttps://github.com/SpringSource/spring-framework/blob/master/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/ConfigurableJtaPlatformを介して JtaPlatform を提供します。ジャワ

JTA の使用法に関するクラス org.springframework.orm.hibernate4.LocalSessionFactoryBean (使用している) については、JavaDoc を参照してください。

于 2013-04-18T06:12:54.333 に答える
0

HibernateとInfinispanの両方がTransactionManagerについて知る必要があります。TransactionManagerについてHibernateに通知すると、Infinispanに通知されます。SpringにはJTAの設定についてHibernateに伝える方法があると思いますが、見つかりませんでした。その部分のHibernate(少なくともHibernate 4を使用しようとしているようです)は、使用するorg.hibernate.service.jta.platform.spi.JtaPlatformについて通知する必要があります。org.hibernate.service.jta.platform.spi.JtaPlatformは、HibernateがJTA環境と対話する方法を知るためのコントラクトです。

于 2012-05-24T11:52:19.353 に答える