使用JNDI在运行时动态更改项目阶段值

时间:2014-07-11 23:11:03

标签: dynamic jsf-2 jndi websphere-8

我需要使用JNDI基于环境动态地(在运行时)更改项目阶段的值。根据我的理解,JNDI将覆盖web.xml中定义的内容。是否有文档/链接可以帮助我编写代码?我正在使用websphere 8.5

在一些示例中,我看到它被定义为resource-ref,但我不确定我是否理解与JNDI一起使用它是如何使其工作并在运行时更改值。

有人可以帮我这个吗?

1 个答案:

答案 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