2013-04-17 21 views
0

我有一個Maven Web應用程序,它依賴於EJB項目。ejb-jar.xml中的env-entry在部署在WAR文件中時未注入@Resource

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

我測試過的EJB項目,使用的Arquillian,我能夠注入該值使用@Resource 原樣: @Resource(name =「configFileLocation」) private String configFile;

現在,當我構建帶有ejb依賴項的.war時,我的EJB項目獲得了一個.war作爲.jar文件,內部爲WEB-INF\lib。在這個EJB項目中(即在.jar中),ejb-jar.xml文件位於正確的META-INF目錄中。

但是現在,當我部署到服務器@Resource注入從來沒有工作。 String總是null。根據我讀過的內容,我在012項目中的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

我通過修改ejb項目的依賴在pom.xmlprovided,然後包裹warejb項目爲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-entriesejbejb-jar.xml當我從ear項目部署到服務器!

0

ejb-jar.xml中會議元素不包含的ejb-name屬性,嘗試把名稱與bean接口名稱匹配。我編輯了你的答案,向你展示一個例子。

+0

Remigo,我已將ejb-name元素添加到會話元素,並且資源仍未注入。當我自己測試ejb項目時仍然有效。 – flchannel