Liberty Profile:以编程方式绑定 JNDI 值

Liberty Profile: binding JNDI values programmatically

我读到,自 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();
        }
    }
}

Liberty 配置文件不支持对 java: 命名空间的写入操作。 EE 7 平台规范从未提及 java: 命名空间的写操作(但经常讨论应用程序声明应用程序服务器应允许应用程序读取的资源),并且 EE 合规性测试套件显然不需要写操作,所以我认为实现禁止它们是非常合理的。

如果此功能对您很重要,您可以打开 WebSphere RFE,但我建议您寻找替代解决方案。例如,您已经在使用单例会话 bean,因此您可以将数据存储在一个成员变量中,并让使用代码查找单例会话 bean 的 java:global JNDI 名称并调用 getter 方法.