我需要使用JNDI基于环境动态地(在运行时)更改项目阶段的值。根据我的理解,JNDI将覆盖web.xml中定义的内容。是否有文档/链接可以帮助我编写代码?我正在使用websphere 8.5
在一些示例中,我看到它被定义为resource-ref,但我不确定我是否理解与JNDI一起使用它是如何使其工作并在运行时更改值。
有人可以帮我这个吗?
答案 0 :(得分:1)
正如JSF 2.0规范所述,您可以通过JNDI条目覆盖上下文参数javax.faces.PROJECT_STAGE
,该条目通过引用java:comp/env/jsf/ProjectStage
查看。
要覆盖context参数,您需要在web.xml文件中定义以下资源环境引用:
<resource-env-ref>
<description />
<resource-env-ref-name>jsf/ProjectStage</resource-env-ref-name>
<resource-env-ref-type>java.lang.String</resource-env-ref-type>
</resource-env-ref>
在应用程序服务器配置中,您可以通过命名空间绑定定义ProjectStage值(在Web管理控制台中选择Environment > Name Space Bindings
,使用jndi名称jsf/ProjectStage
和值Development
定义新的String变量或Production
,视环境而定)。
最后,您需要将项目中的引用与JNDI中的变量绑定。您可以通过ibm-web-bnd.xml
文件以2种方式执行此操作,定义:
<resource-ref name="jsf/ProjectStage" binding-name="jsf/ProjectStage" />
或者在应用程序安装期间,您在步骤中为资源环境引用提供了映射。
有关此主题的详细讨论,请查看Dynamically change project stage value at runtime using JNDI