2017-08-02 88 views
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 { 
} 

Hibernate的配置:

<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> 

登錄連接

2017-07-26 18:31:45,849 WARN [com.arjuna.ats.arjuna.logging.arjLoggerI18N] (HTTP-XXXXXXXXXX%2F10.137.96.103-8080-17) [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - 失敗對於 com.ar[email protected]1e9b02ed org.jboss.cache.optimistic.DataVersioningException:交易 試圖創建/電子商務/貨幣/查詢/ SQL:選擇 currency2_.ID爲ID7_,currency2_.CONVERSION_FACTOR爲CONVERSION2_7_, currency2_.ISO_NAME爲ISO3_7_,currency2_.NAME爲NAME7_, currency2_.SYMBOL作爲SYMBOL7_從TBL_COUNTRY country0_左外 加入上TBL_SHIPPING_ZONE_COUNTRY country0_1_上country0_1_.SHIPPING_ZONE_ID = shippingzo1_.ID內 加入TBL_CURRENCIES currency2_上 shippingzo1_.CURRENCY_ID = currency2_.ID其中country0_.ID = ?;country0_.ID = country0_1_.COUNTRY_ID內加入TBL_SHIPPING_ZONES shippingzo1_ 參數:;重新命名參數:{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) at org.jboss.cache.interceptors.OptimisticLockingInterceptor.visitOptimisticPrepareCommand(OptimisticLockingInterceptor.java:89) at org.jboss.cache.commands.tx.OptimisticPrepareCommand.acceptVisitor( OptimisticPrepareCommand.java:55) at org.jboss.cache.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) at org.jboss.cache.interceptors.base.CommandInterceptor.handleDefault(Command Interceptor.java:131) 在org.jboss.cache.commands.AbstractVisitor.visitOptimisticPrepareCommand(AbstractVisitor.java:155) 在org.jboss.cache.commands.tx.OptimisticPrepareCommand.acceptVisitor(OptimisticPrepareCommand.java:55) 在org.jboss.cache.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:116) at org.jboss.cache.interceptors.TxInterceptor.runPreparePhase(TxInterceptor.java:682) at org.jboss.cache.interceptors。 TxInterceptor $ LocalSynchronizationHandler.beforeCompletion(TxInterceptor.java:1102) at org.jboss.cache.interceptors.OrderedSynchronizationHandler.beforeCompletion(OrderedSynchronizationHandler.java:81) at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple。 beforeCompletion中(SynchronizationImpl e.java:101) at com.arjuna.ats.arjuna.coordinator。TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:269) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:89) at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java: 177) at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1423) at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction。 java:137) at org.jboss org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:170) at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75) 。 aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87) at org.jboss.aspects.tx.TxInterceptor $ Requ ired.invoke(TxInterceptor.java:190) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) 在org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 在org.jboss.ejb3.security.RunAsSecurityInterceptorv2.invoke(RunAsSecurityInterceptorv2.java:94) 在org.jboss.aop.joinpoint。 MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.security.RoleBasedAuthorizationInterceptorv2.invoke(RoleBasedAuthorizationInterceptorv2.java:201) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.in voke(Ejb3AuthenticationInterceptorv2.java:186) 在org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 在org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41) 在有機jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67) 在org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 在org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor。的java:67) 在org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 在org.jboss.ejb3.interceptor.EJB3TCCLInterceptor.invoke(EJB3TCCLInterceptor.java:86) 在org.jboss。 aop.joinpoint.MethodInvocation.invo keNext(MethodInvocation.java:102) 在org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:323) 在org.jboss.ejb3.stateless.StatelessContainer.invokeEndpoint(StatelessContainer.java:691) 在org.jboss.wsf.container.jboss50.invocation.InvocationHandlerEJB3.invoke(InvocationHandlerEJB3.java:96) at org.jboss.ws.core.server.ServiceEndpointInvoker.invoke(ServiceEndpointInvoker.java:222) at org.jboss。 wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:474) //省略

+0

分享請通過git(檢查configuration \ mapping \ TM ...)簡單的項目與這個問題部分。這個問題可能有不同的原因。 – Sergii

+0

你隨時寫地區嗎?它只是準備好了嗎? – Vish

+0

是的我們需要寫很少的時間。大部分是隻讀的 – Arvind

回答

0

如果你的應用程序需要讀取,但不能修改一個持久化類的實例,一個只讀緩存可以用過的。這是最簡單和最佳的執行策略。在集羣中使用它甚至是安全的。 More details.

+0

'策略:非嚴格讀/寫'偶爾更新數據。可以在異常跟蹤中找到原因'由...引發:javax.transaction.RollbackException:[com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted ]無法提交交易 – Vish