我认为以下部分是关于
JTA
支持回答大多数问题:
使用JTA缓存
全有或全无
如果为JTA all启用了缓存
事务上下文,否则
TransactionRequiredException
将
扔了。
Ehcache中提供的隔离级别
JTA是
READ_COMMITTED
. Ehcache是
XAResource
. 完整的两阶段提交是
支持。
明确地:
-
对缓存的所有更改都是事务性的
包括
put
,
remove
,
putWithWriter
,
removeWithWriter
和
removeAll
.
-
直到
COMMIT
已被呼叫。
-
在此之前,请阅读
cache.get(...)
将退回旧的副本。
读不到
块
后记后记
如果正在使用启用XA的缓存
使用writer,写操作将
在事务提交之前排队
时间。完全是一种直截了当的方法
会有它潜在的XAResource
参与同一交易。
Write behind虽然受支持,但应该
可能不与XA一起使用
事务缓存,作为操作
永远不会是同一个的一部分
交易。你的作者也会
交易。。。
对非XA使用Write-through
资源也会起作用,但是
不能保证交易会
写入操作完成后成功
另一方面,任何抛出的异常
在这些写操作期间
导致事务被滚动
通过拥有
UserTransaction.commit()
扔一个
RollbackException
关于性能,我不会太担心,除非你的对象重数百MB。但如果这真的是一个问题,那就(一如既往)衡量一下。