我正在使用扩展的持久化上下文(在SFSB注入Entitymanager)并且为SFSB另外设置了@TransactionManagement(value=TransactionManagementType.BEAN)
以完全控制UserTransaction
。JBoss缓存配置
交易在客户端进行控制,我开始查找包含对实体bean的引用的SFSB。
SymbolischeWerte sbw = (SymbolischeWerte)symbolischeWerteHome.findByPrimaryKey(BigDecimal.valueOf(24704578762l));
System.out.println(symbolischeWerteHome.getSEQ_ID() + "\t\t" + symbolischeWerteHome.getName());
symbolischeWerteHome.beginTransaction();
symbolischeWerteHome.setName(symbolischeWerteHome.getName().concat("A"));
symbolischeWerteHome.commitTransaction();
该工作到目前为止!
启用JBoss Cache和多个客户端后,只有第一个客户端导致数据库选择。其他人从缓存中获取实体。
完美!
问题:
2客户端(客户端A,CLIENTB)同时查找具有相同主密钥的实体,而客户端A贯穿该程序,CLIENTB手动的findByPrimaryKey之后暂停。 当CLIENTA完成时(值被成功保存),CLIENTB的系统输出显示旧值,并被修改并存储到数据库中。
所以我失去了CLIENTA的价值!
这是一个JBoss Cache的配置问题还是这是我的系统设计的一个普遍问题?
缓存配置的实体:在persistence.xml中
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL, region="com.culturall.pension.system.SymbolischeWerteEntity")
缓存配置
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
<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"/>
THX任何意见!