在WAR文件中部署时,ejb-jar.xml中的env-entry没有注入@Resource

时间:2013-04-17 22:34:38

标签: java-ee maven-2 glassfish-3 ejb-3.1 ejb-jar.xml

我有一个依赖于EJB项目的maven Web应用程序。

   <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>soar-ejb</artifactId>
        <version>1.0</version>
        <type>jar</type>
    </dependency>

在EJB项目中,我在env-entry中添加了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>
            <env-entry>
                <description>Config file</description>
                <env-entry-name>configFileLocation</env-entry-name>
                <env-entry-type>java.lang.String</env-entry-type>
                <env-entry-value>dropbox-config.properties</env-entry-value>
            </env-entry>
        </session>
    </enterprise-beans>
</ejb-jar>

我使用arquillian测试了EJB项目,我可以使用@Resource注入此值 因此:     @Resource(name =“configFileLocation”)     private String configFile;

现在,当我使用ejb依赖项构建.war时,我将一个带有我的EJB项目的.war作为WEB-INF\lib内的.jar。在此EJB项目中(即.jar内),ejb-jar.xml文件位于正确的META-INF目录中。

但现在,当我部署到服务器时,@Resource注入永远不会起作用。 String始终为null。根据我所读的内容,我在正确的位置ejb-jar.xml,在EJB项目内和maven生成的.war中。

有人知道我错误配置了什么吗?

谢谢!

编辑:

将会话元素修改为

<session>
        <description>An EJB that loads configuration from a file</description>
        <display-name>ConfigurationProducer</display-name>
        <ejb-name>ConfigurationProducer</ejb-name>
        <ejb-class>com.trf.util.DropboxConfigFileProducer</ejb-class>
        <session-type>Stateless</session-type>
        <env-entry>
            <description>Location of the config file</description>
            <env-entry-name>configFileLocation</env-entry-name>
            <env-entry-type>java.lang.String</env-entry-type>
            <env-entry-value>dropbox-config.properties</env-entry-value>
        </env-entry>
    </session>

2 个答案:

答案 0 :(得分:1)

我通过将ejb中的pom.xml项目的依赖项修改为provided,然后将warejb项目包装到{{}}中来解决了这个问题。 {1}}项目。 Web存档的ear现在看起来像这样:

pom.xml

然后在 <dependency> <groupId>${project.groupId}</groupId> <artifactId>soar-ejb</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> 项目ear中我们有了这个:

pom.xml
当我从 <dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>soar-ejb</artifactId> <version>1.0</version> <type>ejb</type> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>soar-war</artifactId> <version>1.0</version> <type>war</type> </dependency> </dependencies> 项目部署到服务器时,

@Resource注入正在处理env-entries的{​​{1}}中的ejb

答案 1 :(得分:0)

ejb-jar.xml session 元素不包含 ejb-name 属性,尝试将其中一个与bean接口名称匹配的名称。我编辑了你的答案,向你展示一个例子。