我有一个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时,我的EJB项目将得到一个.war作为WEB-INF\\lib的.jar。 在此EJB项目中(即.jar内), ejb-jar.xml文件位于正确的META-INF目录中。

但是现在,当我部署到服务器时, @Resource注入将永远无法工作。 String始终为null 根据我阅读的内容,无论是在EJB项目中还是在Maven生成的.war中,我都将ejb-jar.xml放在正确的位置。

有人会对我的配置错误有一个想法吗?

谢谢!

编辑:

将会话元素修改为

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

===============>>#1 票数:1 已采纳

通过修改要provided pom.xmlejb项目的依赖项,然后将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上工作!

===============>>#2 票数:0

您的ejb-jar.xmlsession元素不包含ejb-name属性,请尝试放置一个名称与Bean接口名称匹配的名称。 我已经编辑了您的答案以向您展示示例。

  ask by flchannel translate from so

未解决问题?本站智能推荐: