【发布时间】:2013-07-19 07:57:25
【问题描述】:
我目前正在使用 Preferences API 在 Vaadin 应用程序中保存设置。 该应用程序在 Tomcat 服务器上运行了 3 个 WebApp。 据我所知,Tomcat 服务器上运行的每个模块都有一个 ClassLoader,但它都在一个虚拟机中运行。
谁能向我解释为什么 Java Preferences 在多个 ClassLoader 上工作?我找不到任何来源,也没有通过调试找到任何东西。
非常感谢。
【问题讨论】:
-
不工作到底是什么意思?您确定要在多用户上下文中使用首选项吗?它更适用于桌面应用程序。
-
无法正常工作,您启动两个应用程序,在一个应用程序中更改一些首选项并在另一个应用程序中使用 get-Methods(在不同的 JVM 中运行)并且不会显示更改(See Question 5 )。我已经实现了一个 Wrapper 类来保存用户偏好,效果很好。
-
这不是问题 5 暗示您描述的案例不能保证有效吗?会怎样?不同的 JVM 不相互通信,那么它们如何获得更改通知?
-
也许我问错了问题:问题不是为什么它不能在多个 JVM 上工作,而是为什么它可以与多个 ClassLoader 一起工作。抱歉,我不是母语人士。
-
我认为与多个 ClassLoader 一起使用也不安全。您似乎看到的是您的类的三个版本使用相同的内存中 Preferences 对象(因为它们在 JVM 中)。不确定这是否是一件好事。 Tomcat 应该让它们保持隔离,而这似乎在这里崩溃了。首选项不是为并发访问而设计的数据库。
标签: java preferences