我有一个打包在EAR文件中的应用程序,并部署在WildFly 9.0.2 Final上。它需要读取WildFly定义的一些系统属性。
问题是EAR中的类无法读取WildFly系统属性。例如 - 以下代码获取NullPointerException:
${main:key}
这就是错误:
String DEPLOY_DIR = System.getProperty("jboss.server.base.dir") + File.separator + "deployments"
File deployDir = new File(DEPLOY_DIR);
发生错误,因为以下内容返回null:
java.lang.NullPointerException
at java.io.File.<init>(File.java:277)
请注意,当WildFly上升时,其相关的系统属性会在其日志中正确显示:
System.getProperty("jboss.server.base.dir")
我的问题 - 为什么EAR无法读取任何系统属性?
答案 0 :(得分:1)
我首先要说的是,在一个大型系统中,很难诊断出这些问题。
在JVM中,系统属性是共享的,您应该始终看到相同的值,因为Wildfly9文档确认时会警告您Property Replacement的风险
系统属性等在安全上下文中解析 应用程序服务器本身,而不是包含该文件的部署。
所以答案应该是否定的:EAR 可以读取所有系统属性,因为您没有收到SecurityException(这排除了您在安全上下文中运行并且阻塞的事实你)。
无论如何,您可能需要检查一些情况,例如: