2013-04-17 1 views
0

J'ai une application web maven qui dépend d'un projet EJB.L'entrée env dans ejb-jar.xml n'est pas injectée avec @Resource lors du déploiement dans le fichier WAR

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

Dans le projet EJB là, je l'ai ajouté un env-entry dans le ejb-jar.xml comme tel:

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

Je l'ai testé le projet EJB, en utilisant Arquillian, et je suis en mesure d'injecter cette valeur en utilisant @Resource en tant que tel: @Resource (name = "configFileLocation") private String configFile; Maintenant, quand je construis le .war avec la dépendance ejb, je reçois un .war avec mon projet EJB en tant que .jar à l'intérieur WEB-INF\lib. Dans ce projet EJB (c'est-à-dire à l'intérieur du fichier .jar), le fichier ejb-jar.xml se trouve dans le répertoire approprié META-INF. MAIS maintenant, quand je déploie sur le serveur l'injection @Resource ne fonctionne jamais. Le String est toujours null. D'après ce que j'ai lu, j'ai le ejb-jar.xml dans l'emplacement correct, à la fois dans le projet EJB et dans le .war que maven produit.

Est-ce que quelqu'un aurait une idée de ce que j'ai mal configuré?

Merci!

EDIT:

modifié l'élément de 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> 

Répondre

0

I résolu en modifiant la dépendance du projet ejb dans pom.xml être provided puis envelopper les projets war et ejb dans un projet ear. pom.xml de l'archive web ressemble maintenant à ceci:

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

Ensuite, dans le pom.xml du projet ear nous avons ceci:

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

injection @Resource travaille actuellement sur le env-entries dans ejb-jar.xml du ejb quand je déployer sur le serveur à partir du projet ear!

0

L'élément de la session de votre ejb-jar.xml ne contient pas le nom ejb propriété, essayez de mettre un avec le nom correspondant au nom de l'interface du bean. J'ai édité votre réponse pour vous montrer un exemple.

+0

Remigo, j'ai ajouté l'élément ejb-name à l'élément de session et la ressource n'est toujours pas injectée. Fonctionne toujours lorsque je teste le projet ejb par lui-même. – flchannel

Questions connexes