Java Liberty概要文件:以编程方式绑定JNDI值

Java Liberty概要文件:以编程方式绑定JNDI值,java,jndi,websphere-liberty,Java,Jndi,Websphere Liberty,我已经读到,自JavaEE6以来,可以通过编程将值绑定到Java:app:env、Java:comp:env和Java:global:env中。然而,当我尝试它时,我得到一个javax.naming.OperationNotSupportedException 我使用Liberty 8.5.5.6从一个启动bean中执行此操作。问题是Liberty、我的编码方式,还是您可以通过编程方式绑定到这些名称空间的前提 (简化)代码: Liberty配置文件不支持对java:命名空间的写入操作。EE 7平

我已经读到,自JavaEE6以来,可以通过编程将值绑定到Java:app:env、Java:comp:env和Java:global:env中。然而,当我尝试它时,我得到一个javax.naming.OperationNotSupportedException

我使用Liberty 8.5.5.6从一个启动bean中执行此操作。问题是Liberty、我的编码方式,还是您可以通过编程方式绑定到这些名称空间的前提

(简化)代码:


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


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

感谢您的澄清。这就回答了我的问题。@MichaelWalsh你应该点击答案左边的复选标记。这会给我额外的声誉,也会提高你的接受率,这样将来别人就更有可能回答你的问题。
@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();
        }
    }
}