我拼命地尝试将一个简单的字符串注入到 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 复制粘贴到web.xml
WAR 并重新部署它,结果相同。
我究竟做错了什么?通过搜索 Internet,我得到可能需要调整 a domain.xml
,但似乎没有 XML 模式,并且 asadmin 命令的文档是......压倒性的。
非常感谢任何提示!
编辑:我问为什么我不简单地为字符串字段设置一个默认值。这是因为我想通过ejb-jar.xml
. 否则它将只是隐藏在代码中。