0

我有时只能看到缓存异常,我也无法重现。所以只是想知道我该如何进行。

我们正在使用 Jboss As 5.1 和 Hibernate 3.3.2.GA 版本

我们有一个实体

 @Table(name = "TBL_COUNTRY")
 @Entity
 @Cache(region="/country", usage=CacheConcurrencyStrategy.READ_ONLY)
 public class Country implements Serializable {
}

休眠配置:

<properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
    <property name="hibernate.show_sql" value="false" />
    <property name="hibernate.format_sql" value="false" />

    <!-- Clustered cache with TreeCache -->
    <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
    <property name="hibernate.cache.use_second_level_cache" value="true" />
    name="hibernate.cache.use_query_cache" value="true" />
    name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory" />

    <property name="hibernate.cache.region.jbc2.query.localonly" value="true"/>
    <property name="hibernate.cache.region.jbc2.cachefactory" value="java:CacheManager" />
    <property name="hibernate.cache.region.jbc2.cfg.entity" value="mvcc-entity" />
    <property name="hibernate.cache.region.jbc2.cfg.query"  value="local-query" />
    <property name="hibernate.cache.region_prefix" value="ecommerce"/>

    <property name="jboss.depends.1" value="jboss:service=Naming"/>
    <property name="jboss.depends.2" value="jboss:service=TransactionManager"/>
    <property name="jboss.depends.3" value="jboss.cache:service=CacheManager"/>
    <property name="jboss.depends.4" value="jboss.jca:name=ecomm-ds,service=ManagedConnectionPool"/>
</properties>

附上日志

ID 内连接 TBL_CURRENCIES currency2_ on shippingzo1_.CURRENCY_ID=currency2_.ID where country0_.ID=?; 参数: ; 命名参数:{countryCode=US} 重新命名。自此事务开始以来,它已经由另一个(可能是远程的)事务创建。我们有一个并发的创建事件。在 org.jboss.cache.interceptors.OptimisticValidatorInterceptor.visitOptimisticPrepareCommand(OptimisticValidatorInterceptor.java:116) 在 org.jboss.cache.commands.tx.OptimisticPrepareCommand.acceptVisitor(OptimisticPrepareCommand.java:55) 在 org.jboss.cache.interceptors.base .CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) 在 org.jboss.cache.interceptors.OptimisticLockingInterceptor.visitOptimisticPrepareCommand(OptimisticLockingInterceptor.java:89) 在 org.jboss.cache。

4

1 回答 1

0

如果您的应用程序需要读取而不是修改持久类的实例,则可以使用只读缓存。这是最简单和最佳的执行策略。在集群中使用它甚至是安全的。更多细节。

于 2017-08-02T12:53:53.410 回答