【发布时间】:2011-01-02 21:49:54
【问题描述】:
我有一个缓存启动时 SOAP 调用的微小/简单结果的系统
我需要实例能够在启动时重新加载其缓存(以防 SOAP 服务失效),并且还需要处理多个实例使用此缓存文件的可能性
我选择使用java.util.prefs,但 Java 的内置自动同步线程间歇性失败(1% 的时间使用默认 JVM 30 秒后备存储同步)转储以下异常:
Jan 8, 2010 12:30:07 PM java.util.prefs.FileSystemPreferences syncWorld
WARNING: Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.
我怀疑 this bug 但这已在 1.5(tiger-b40) 中修复,我们在此框中的 java 5 是“1.5.0_16-b02”。
我现在怀疑这可能是因为我们有多个 JVM 共享这个后备存储,尽管这似乎不会在我们的其他机器上发生。
谁能证实这一点? 有什么风险(如果有的话)?
如果我的方法有缺陷,我应该使用什么作为替代方法?
【问题讨论】:
-
给出一些代码,别指望我们猜到
-
听起来肯定与让多个 JVM 尝试使用同一个文件有关。人们倾向于使用数据库来集中数据以供多个进程同时共享和修改。
-
java.util.prefsAPI 是一只火鸡。我建议忽略它并使用其他人实际使用的东西,例如数据库。 -
我实际上根本不想共享数据,我只是想创建一个廉价的配置(来自 SOAP 调用)缓存。 DB 太重了
-
对于那些投票赞成 Bozho 的人:没有代码,这是失败的 Java SYSTEM 线程之一!大声笑
标签: java preferences