2013-07-19 37 views
0

我目前正在使用Preferences API将设置保存在Vaadin应用程序中。 该应用程序在Tomcat服务器上运行3个WebApps。 据我所知,Tomcat服务器上运行的每个模块都有一个ClassLoader,但它全部运行在一台虚拟机中。使用多个ClassLoaders的首选项API?

任何人都可以向我解释为什么Java首选项在多个ClassLoaders上工作吗?我无法找到任何来源,我没有找到任何调试。

非常感谢。

+0

你究竟是什么意思不工作?你确定你想在多用户环境中使用首选项吗?它更适用于桌面应用程序。 – Thilo

+0

不工作,你启动两个应用程序,改变一个首选项,并在另一个应用程序中使用get-Methods(运行在不同的JVM中),并且更改不会显示([请参阅问题5](http:// docs.oracle.com/javase/7/docs/technotes/guides/preferences/designfaq.html))。我已经实现了一个Wrapper类来保存可以正常工作的用户首选项。 – iliketocodeandstuff

+0

不是说问题5意味着你所描述的情况不能保证起作用吗?它会怎样?不同的JVM不会互相对话,那么他们将如何得到变化的通知? – Thilo

回答

0

我已经找到了答案:

您可以通过调用得到一个首选项对象:

Preferences prefs = Preferences.userRoot().node("test); 

偏好和PreferencesFactory由引导类加载器加载的,所以它是每一个模块相同(how ClassLoader work in Apache ),并且由于该对象是在PreferencesFactory中创建的,因此它不会在WebApp上下文中创建。