无法使用GlassFish将@Resource字符串注入@Singleton EJB

时间:2013-08-15 14:12:09

标签: dependency-injection glassfish code-injection ejb-3.1 glassfish-embedded

我正在拼命尝试将一个简单的String注入到Glassfish上的单例EJB中。

import java.net.URI;
import java.net.URISyntaxException;
import javax.annotation.Resource;
import javax.ejb.Singleton;

@Singleton
public class MavenArtifactResolverProviderBean {

    private URI configurationUri() throws URISyntaxException {
        return new URI(configurationString);
    }

    @Resource(name = "configurationUri")
    private String configurationString;

    ...
}

bean类打包为EJB。这是我的META-INF/ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee"
         version = "3.1"
         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/ejb-jar_3_1.xsd">
    <enterprise-beans>
        <session>
            <ejb-name>MavenArtifactResolverProviderBean</ejb-name>
            <ejb-class>net.java.trueupdate.server.impl.maven.MavenArtifactResolverProviderBean</ejb-class>
            <env-entry>
                <env-entry-name>configurationUri</env-entry-name>
                <env-entry-type>java.lang.String</env-entry-type>
                <env-entry-value>net/java/trueupdate/artifact/impl/maven/main-repositories.xml</env-entry-value>
                <injection-target>
                    <injection-target-class>net.java.trueupdate.server.impl.maven.MavenArtifactResolverProviderBean</injection-target-class>
                    <injection-target-name>configurationString</injection-target-name>
                </injection-target>
            </env-entry>
        </session>
    </enterprise-beans>
</ejb-jar>

我不确定我是否需要这个烂摊子。

接下来,我通过Jersey Test Framework 1.17.1在Embedded GlassFish 3.1.1上运行JerseyTest。但是,没有注入任何内容,我得到的只是来自NullPointerException方法的configurationUri()

我也试图忽略失败的测试,将bean JAR打包在WAR中并将其部署到具有相同结果的独立GlassFish 4.0。接下来,我将env-entry复制粘贴到WAR的web.xml并重新部署,结果相同。

我做错了什么?从搜索互联网我得到的可能是我需要调整domain.xml,但似乎没有XML模式,asadmin命令的文档是......压倒一切。

非常感谢任何提示!

编辑:我的一个问我为什么不简单地为字符串字段设置默认值。这是因为我想通过ejb-jar.xml记录此配置项。否则它将隐藏在代码中。

1 个答案:

答案 0 :(得分:0)

尝试使用@Resource(lookup = "configurationUri")