Я использую расширенный контекст постоянства (введенный Entitymanager в SFSB) и дополнительно установил @TransactionManagement(value=TransactionManagementType.BEAN)
для того, чтобы SFSB имел полный контроль над UserTransaction
.Конфигурация кэша JBoss
Сделка контролируется на стороне клиента, где я начинаю поиск для 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 и нескольких клиентов только первый клиент вызывает выбор базы данных. Другие получают объект от кеша.
безупречный!
Проблема:
2 клиентов (Clientâ, CLIENTB) одновременно смотрит на объект с таким же первичным ключом, в то время как Clientâ проходит через программу, CLIENTB вручную остановить после поиска по первичному ключу. Когда CLIENTA закончил (значение успешно сохранилось), система CLIENTB показывает старое значение, которое изменяется и сохраняется в базе данных.
Так что я теряю ценности CLIENTA !!
Является ли это проблемой конфигурации кэша JBoss или это общая проблема моего системного дизайна?
Cache конфигурации для объекта:
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL, region="com.culturall.pension.system.SymbolischeWerteEntity")
Cache конфигурации в persistence.xml
<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 за любые советы!