2010-08-17 1 views
1

Я использую расширенный контекст постоянства (введенный 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 за любые советы!

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^