![](/img/trans.png)
[英]java se with hibernate and JavaDB. How do i deploy application?
[英]Hibernate Concurrency issue in Java SE application
我正在構建一個由Hibernate支持的Java SE應用程序。 主要將運行許多Java SE實例,並且將有許多Hibernate Session工廠。 當一台客戶端計算機將對象插入數據源時,其他客戶端將不會看到它,除非我清除了緩存。 在這種情況下是否有更好的機制可以使用? 下面是我的緩存清除方法。
public static void clearCache() {
HibernateHelper.beginTranscation();
HibernateHelper.getCurrentSession().clear();
HibernateHelper.getSessionFactory().evictQueries();
try {
Map<String, ClassMetadata> classesMetadata = HibernateHelper
.getSessionFactory().getAllClassMetadata();
for (String entityName : classesMetadata.keySet()) {
HibernateHelper.getSessionFactory().evictEntity(entityName);
}
} catch (Exception e) {
}
HibernateHelper.commit();
}
請注意,我也在使用二級緩存(Memcache)和查詢緩存。
當您的應用程序使用多個會話工廠時,使用L2緩存的方式可能會導致數據不一致,因此它是分布式的 , 因此需要分布式緩存 。
這是您的系統外觀
要么
或者,您可以有一個中央的Memcache服務器,每個客戶端(在memcached client的幫助下)都將使用該服務器。 (所有用戶使用一個memcached)
基本要求是, 一個用戶/會話工廠提交的更改對於其他用戶/會話工廠應該是可見的,以便利用緩存。 您提供的代碼示例沒有幫助,因為它將在每次提交事務時清除L2緩存。 無論如何,這是由L2緩存或會話緩存完成的 。
所以我的建議是
請同時檢查此鏈接 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.