我有一个依赖于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>
答案 0 :(得分:1)
我通过将ejb
中的pom.xml
项目的依赖项修改为provided
,然后将war
和ejb
项目包装到{{}}中来解决了这个问题。 {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接口名称匹配的名称。我编辑了你的答案,向你展示一个例子。