WebSphere <env-entry> in application.xml 和@Resource 注入

WebSphere <env-entry> in application.xml and @Resource injection

我无法在我的 WebSphere 8.5.5 应用程序中使用 @Resource 注释从 application.xml 注入环境条目。 (我不想将条目向下移动到组件级别 ejb-jar.xml。)我错过了什么?

application.xml:

<application
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"
        version="6">

    <env-entry>
        <env-entry-name>fileName</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>theValue</env-entry-value>
    </env-entry>

有了这个,我看到 "fileName" 在 WebSphere 管理控制台部分 定义为 "theValue" 应用程序的环境条目。但是我不知道如何从我的 EJB 访问它。

StartupBean.java:

@Singleton
@Startup
public class StartupBean {
    @Resource(name = "fileName")
    private String fileName = "default";

fileName 总是 "default",而不是 "theValue"。

我尝试使用 "java:comp" 和 "java:app" 进行手动查找(根据 的建议),但两者都抛出 NamingException

Context ctx = new InitialContext();
fileName = (String) ctx.lookup("java:comp/env/fileName");
fileName = (String) ctx.lookup("java:app/env/fileName");

application.xml 中声明的资源必须使用 java:app/envjava:global/env 前缀,因此它应该类似于:

<env-entry>
    <env-entry-name>java:app/env/fileName</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>theValue</env-entry-value>
</env-entry>

然后,注入字段如下:

@Resource(name = "java:app/env/fileName")
private String fileName = "default";