抛出BackingStoreException的java.util.Prefs - 为什么?

Hav*_*ess 19 java preferences

我有一个系统可以缓存启动时SOAP调用的微小/简单结果

我需要的情况下才能够重新加载启动其缓存(如果SOAP服务是死的),也使用此缓存文件处理多个实例的可能性

我选择使用java.util.prefs,但Java的内置自动同步线程间断性地失效(使用默认的JVM 30年代后备存储同步的时间为1%)倾销以下除外:

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.
Run Code Online (Sandbox Code Playgroud)

我怀疑这个错误,但这是固定在1.5(虎-B40),以及我们对这个盒子Java 5的是"1.5.0_16-B02".

我现在怀疑,这可能是因为我们有多个JVM共享这个后备存储,但是这似乎并没有对我们的其他机器的情况发生.

谁能证实这一点?有什么风险?

如果我的方法有缺陷,我应该作为替代方案使用什么?

Kev*_*ght 10

"我现在怀疑这可能是因为我们有多个JVM共享这个Backing Store"

绝对是这样的!如果两个JVM尝试同时锁定文件,那么这就是您所看到的.

具体细节取决于锁的类型,操作系统和文件系统.

您可能希望尝试在try/catch块中包装导致此操作的操作,然后在失败时重试该操作.

  • 感谢您的回复.不幸的是,问题是Java Preferences的同步线程不受我们控制,因此无法捕获异常.好评如下:http://www.allaboutbalance.com/articles/disableprefs/ (4认同)