【发布时间】:2017-06-21 10:41:12
【问题描述】:
GlassFish 允许创建 N 个域。每个域都有自己的 Java 类(库等)和系统设置。
例如,我们有两个域 - domain1 和 domain2。
通过 GF Web 控制台 (http://localhost:4848) 为 domain1 - com.temp.foo=test1 设置了一个系统属性。除了通过 GF Web 控制台 (http://localhost:7575) 之外,还为 domain2 - com.temp.foo=test2 设置了一个系统属性。
现在,在域 1 中
System.out.println(System.getProperty("org.temp.foo"))
//returns `test1`
在域2中
System.out.println(System.getProperty("org.temp.foo"))
//returns `test2`
据我了解,GF 及其所有域都在一个 JVM 实例中运行。而且我不明白在 JVM 单独系统属性的一个实例中是如何实现的。谁能解释一下?
注意:我知道这可能是一个很长的解释,这就是为什么我只按照我可以在互联网上阅读的顺序询问主要原理和解决方案/库名称的原因。
【问题讨论】:
-
我的回答得到了一些 cmets;我不确定它是否真的正确。我更新了它;但我不介意你决定不接受。我什至考虑在这个问题上悬赏……如果你对此感兴趣,请告诉我。
-
@GhostCat 感谢您的通知。如果可以,请开始赏金 - 这个问题对我来说仍然很重要且很有趣。
-
赏金就在那里!
-
嗯......我的意见:首先看起来类加载机制似乎是这个问题的答案。但现在我支持它。但这意味着对于单个 JVM,系统属性必须相同。我看到该行为的两个可能原因:1)“GF 及其所有域都在一个 JVM 实例中运行”的想法可能是错误的。也许它们是两个 JVM。 (我更喜欢这个。) 2)在代码中的某个地方,系统属性在被另一个地方读取之前被覆盖(我认为不太可能)。
-
太糟糕了;我曾希望赏金会在这里引起更多的支持......希望你至少能算上“10”......
标签: java jakarta-ee glassfish