在 Glassfish 4.1 上使用 JNDI 设置项目阶段

Set Project Stage with JNDI on Glassfish 4.1

我正在寻找使用 JNDI 配置在 Glassfish(v4.1.1 build 1)上设置项目阶段,以允许我的服务器拥有每个不同的项目阶段,并允许我使用 Git 推送修改而无需每次推送时将 javax.faces.PROJECT_STAGE 更改为 web.xml。

我已经在 this post 中尝试过一些东西,但它似乎不起作用,可能是因为它不是同一个 Glassfish 版本。

in web.xml(在我的项目中)

<resource-ref>
    <res-ref-name>jsf/ProjectStage</res-ref-name>
    <res-type>java.lang.String</res-type>
    <mapped-name>javax.faces.PROJECT_STAGE</mapped-name>
</resource-ref>

in domain.xml(我的服务器使用的域)

<custom-resource factory-class="com.sun.faces.application.ProjectStageJndiFactory" res-type="java.lang.String" jndi-name="javax.faces.PROJECT_STAGE">
    <property name="stage" value="Development"></property>
</custom-resource>

我也尝试使用 <property name="value" value="Development"></property> 而不是 name="stage"

但是,当我显示 #{facesContext.application.projectStage} 时,它显示为 Production,因为它看起来是默认阶段。

希望你能帮助我,谢谢!

解决了我的问题!

看来在手动编辑 domain.xml 文件时创建 JNDI 资源并没有像我解释的那样正确创建资源

因此它可以与使用 asadmin 命令创建的 JNDI 自定义资源一起正常工作。

JNDI 自定义资源创建命令

create-custom-resource --restype java.lang.String --factoryclass com.sun.faces.application.ProjectStageJndiFactory --property "stage=Development" javax.faces.PROJECT_STAGE

web.xml

<resource-ref>
    <res-ref-name>jsf/ProjectStage</res-ref-name>
    <res-type>java.lang.String</res-type>
    <mapped-name>javax.faces.PROJECT_STAGE</mapped-name>
</resource-ref>