Конфигурация JBoss Cache - PullRequest
       8

Конфигурация JBoss Cache

1 голос
/ 17 августа 2010

Я использую расширенный контекст постоянства (внедренный Entitymanager в SFSB) и дополнительно установил @TransactionManagement(value=TransactionManagementType.BEAN), чтобы SFSB имел полный контроль над UserTransaction.

Транзакция контролируется на стороне клиента, где я запускаю поиск 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 клиента (CLIENTA, CLIENTB) одновременно ищут объект с тем же первичным ключом, в то время как CLIENTA запускается через программу, CLIENTB вручную останавливается после findByPrimaryKey. Когда CLIENTA завершил (значение успешно сохранено), система CLIENTB отображает старое значение, которое также изменяется и сохраняется в базе данных.

Так что я теряю ценности КЛИЕНТЫ !!

Это проблема конфигурации JBoss Cache или это общая проблема моего системного дизайна?

Конфигурация кэша для сущности:

@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL, region="com.culturall.pension.system.SymbolischeWerteEntity")

Конфигурация кэша в файле 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"/>

Спасибо за ЛЮБОЙ совет!

1 Ответ

0 голосов
/ 28 декабря 2011

Если я правильно вас понял, вы настроили кеш как транзакционный. Это по определению означает, что клиенты в разных транзакциях видят разные версии данных; если данные были изменены в другой транзакции, вам нужно явно обновить данные из БД (таким образом, отбрасывая ваши изменения), чтобы увидеть эти изменения.

...