2013-04-17 1 views
0

У меня есть веб-приложение maven, которое имеет зависимость от проекта EJB.env-entry в ejb-jar.xml не вставляется с @Resource при развертывании внутри WAR-файла

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

Я тестировал проект EJB, используя arquillian, и я могу вводить это значение используя @Resource как таковой: @Resource (name = "configFileLocation") private String configFile;

Теперь, когда я создаю .war с зависимостью ejb, я получаю .war с моим проектом EJB как .jar внутри WEB-INF\lib. В рамках этого проекта EJB (т. Е. Внутри .jar) файл ejb-jar.xml находится в соответствующем каталоге META-INF.

НО, но теперь, когда я развертываю на сервере, вставка @Resource никогда не работает. String всегда null. Согласно тому, что я прочитал, у меня есть ejb-jar.xml в правильном месте, как в проекте EJB, так и в .war, который производит maven.

У кого-нибудь есть представление о том, что я настроил неправильно?

Спасибо!

EDIT:

Модифицированный сессии элемент

<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.xml быть provided, а затем обертывание war и ejb проектов в 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 в ejb «s ejb-jar.xml, когда я развертывание на сервере с проекта ear!

0

сессия элемент вашего EJB-jar.xml не содержит EJB-имя- недвижимость, попробуйте поместите одно с именем, соответствующим имени интерфейса компонента. Я отредактировал ваш ответ, чтобы показать вам пример.

+0

Remigo, я добавил элемент ejb-name в элемент сеанса, и ресурс по-прежнему не вводится. Все еще работает, когда я сам тестирую проект ejb. – flchannel

 Смежные вопросы

  • Нет связанных вопросов^_^