![](/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.