我已经读过,自Java EE 6以来,可以通过编程方式将值绑定到java:app:env,java:comp:env和java:global:env。但是,当我尝试它时,我得到一个javax.naming.OperationNotSupportedException。
我是使用Liberty 8.5.5.6从启动bean执行此操作。是问题Liberty,我编码的方式,还是可以通过编程方式绑定到这些命名空间的前提?
(简体)代码:
@Startup
@Singleton
public class ConfigStartup {
@PostConstruct
void initialize(){
try {
InitialContext ic = new InitialContext();
ic.bind("java:app:env/LOGGING_LEVEL", "ALL");
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
Liberty概要文件不支持对java:
命名空间的写入操作。 EE 7平台规范从未提及java:
命名空间的写操作(但经常讨论声明应用程序服务器应允许应用程序读取的资源的应用程序),而EE兼容性测试套件显然不需要写操作,所以我认为实施不允许它们是合理的。
如果此功能对您很重要,您可以打开WebSphere RFE,但我建议您找一个替代解决方案。例如,您已经在使用单例会话bean,因此您可以将数据存储在成员变量中,并使用代码查找单例会话bean的java:global
JNDI名称并调用getter方法。