0

我正在尝试将 Infinispan 用作使用 Tomcat 6、Hibernate 4 和 Spring 3.5 等技术的应用程序的 Hibernate L2 缓存。在 Tomcat 和我们当前的事务管理器中运行的应用程序是

    org.springframework.orm.hibernate4.HibernateTransactionManager

我们为 Infinispan 介绍在 hibernate 属性文件中引入了以下属性。

hibernate.cache.region.factory_class=org.hibernate.cache.infinispan.InfinispanRegionFactory
hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory 
   hibernate.transaction.jta.platform=org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform 
   hibernate.transaction.manager_lookup_class=org.hibernate.cache.infinispan.tm.HibernateTransactionManagerLookup

引入 Infinispan 后,我们失去了应用程序的稳定性,并开始随机出现不同的错误。我假设我们的 Infinispan 配置不正确(我们使用跨国缓存)。我认为我们的事务管理器和 Infinispan 事务设置不匹配。请建议正确配置。

我们看到的错误

    java.lang.IllegalStateException: Transaction TransactionImple < ac, BasicAction: 0:ffff0a1e015a:c2f8:51921dac:3de status: ActionStatus.ABORTED > is not in a valid state to be invoking cache operations on.

    org.springframework.transaction.IllegalTransactionStateException: Transaction is already completed - do not call commit or rollback more than once per transaction

我使用的 Infinispan 配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:infinispan:config:5.1"
                xsi:schemaLocation="urn:infinispan:config:5.1 http://www.infinispan.org/schemas/infinispan-config-5.1.xsd">

        <global>
            <globalJmxStatistics enabled="true" jmxDomain="org.infinispan" allowDuplicateDomains="true"/>
            <transport
                    transportClass="org.infinispan.remoting.transport.jgroups.JGroupsTransport"
                    clusterName="infinispan-hibernate-cluster"
                    distributedSyncTimeout="50000"
                    strictPeerToPeer="false">
                <properties>
                    <property name="configurationFile" value="jgroups.xml"/>
                </properties>
            </transport>
        </global>

        <default>
        </default>

        <namedCache name="aaa-replicated-cache-entity">
            <clustering mode="replication">
                <stateRetrieval fetchInMemoryState="false" timeout="60000"/>
                <sync replTimeout="20000"/>
            </clustering>
            <locking isolationLevel="READ_COMMITTED" concurrencyLevel="1000"
                     lockAcquisitionTimeout="15000" useLockStriping="false"/>
            <eviction maxEntries="10000" strategy="LRU"/>
            <expiration maxIdle="100000" wakeUpInterval="5000"/>
            <lazyDeserialization enabled="true"/>
            <transaction useSynchronization="true"                      
                         transactionMode="TRANSACTIONAL" autoCommit="false"
                         lockingMode="OPTIMISTIC"/>
            <loaders passivation="false" shared="false" preload="false">
                <loader class="org.infinispan.loaders.cluster.ClusterCacheLoader"
                        fetchPersistentState="false"
                        ignoreModifications="false" purgeOnStartup="false">
                    <properties>
                        <property name="remoteCallTimeout" value="20000"/>
                    </properties>
                </loader>
            </loaders>
        </namedCache>
    </infinispan>


    Thanks
4

0 回答 0