EHCache如何实施其交易?

时间:2010-10-19 09:49:20

标签: java performance transactions ehcache

这个问题可能听起来含糊不清,但我试图理解EHCache交易能力的一般概念 假设我将EHCache配置为内存缓存,我还将其配置为缓存MyObject EHCache是​​否克隆了MyObject的实例我是否正在检索这是否作为事务的一部分完成?

我主要是因为我被告知(在我的question的答案中)使用EHCache并且我担心它对性能的影响。 MyObject是一个中等重量的物体,我不想不必要地复制它 另外,为了验证,EHCache只在交易时阻止写入对象,对吧?

谢谢,
以太

1 个答案:

答案 0 :(得分:2)

我认为关于JTA支持的文档的以下部分回答了您的大部分问题:

  

使用JTA缓存

     

全部或全无

     

如果为所有JTA启用了缓存   对它的操作必须在一个   交易上下文,否则一个   TransactionRequiredException将是。{   抛出。

     

更改可见性

     

Ehcache提供的隔离级别   JTA是READ_COMMITTED。 Ehcache是​​一个   XAResource。完全两阶段提交是   支撑。

     

具体做法是:

     
      
  • 对缓存的所有变更都是事务性的,包括put,   removeputWithWriter,   removeWithWriterremoveAll
  •   
  • 在群集中或群集中的本地JVM中看不到变更更改   直到COMMIT被调用。
  •   
  • 在此之前,请阅读cache.get(...)之类的其他交易   将返回旧副本。 读取不   块即可。
  •   
     

后写和直写

     

如果正在使用启用了XA的缓存   与作家,写操作会   排队直到事务提交   时间。只是一种直写法   会有其潜在的XAResource   参与同一笔交易。   后备,虽然支持,但应该   可能不会与XA一起使用   事务缓存,作为操作   永远不会成为同一个人的一部分   交易。你的作家也会   负责获得新的   交易...

     

使用非XA的直写   资源也可以,但有   不保证交易会   写入操作后成功   已成功执行。在   另一方面,任何抛出的异常   在这些写操作期间会   导致事务被滚动   回来了   UserTransaction.commit()抛出一个   RollbackException

关于表演,我不会太担心,除非你的对象重量为几百MB。但如果这真的是一个问题,那么衡量事情(一如既往)。