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



我有一个maven web应用程序,它依赖于EJB项目。

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

在EJB项目中,我在ejb-jar.xml中添加了一个env-entry:

<?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时,我在WEB-INFlib中以.jar的形式获得了ejb项目的.war。在这个EJB项目中(即在.jar中),ejb-jar.xml文件位于适当的META-INF目录中。

但是现在,当我部署到服务器的@Resource注入从来没有工作。String总是null。根据我所阅读的内容,我将ejb-jar.xml置于EJB项目和maven生成的.war中正确的位置。

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

谢谢!

编辑:

将session元素修改为

<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>

我通过修改pom.xmlejb项目的依赖项为provided,然后将warejb项目包装为ear项目来解决这个问题。web存档的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>
当我从ear项目部署到服务器时,

@Resource注入现在正在ejbejb-jar.xml中的env-entries上工作!

ejb-jar.xmlsession元素不包含ejb-name属性,尝试放置一个与bean接口名称匹配的名称。我编辑了你的答案,给你一个例子。

相关内容

  • 没有找到相关文章

最新更新