2009-05-19 8 views
2

J'ai des problèmes pour que JBoss injecte une valeur de variable d'environnement dans un bean. Voici ma classe de bean:question sur EJB et injection de ressources

 
package com.topcoder.test; 

import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.Resource; 
import javax.ejb.EJBContext; 
import javax.ejb.Remote; 
import javax.ejb.SessionContext; 
import javax.ejb.Stateless; 
import javax.ejb.TransactionManagement; 
import javax.ejb.TransactionManagementType; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.PersistenceContextType; 

import org.jboss.annotation.ejb.RemoteBinding; 

import com.topcoder.test.Test; 

public @Stateless(name = "TestBean") 
class TestBean implements Test { 

    @Resource(name="managerFile") 
    private String managerFile; 

    public String getManagerFile() { 
     return managerFile; 
    } 

    public String testMethod() { 
     String ret = "the value of managerFile in testMethod() is " + getManagerFile(); 
     return ret; 
    } 

    @PersistenceContext(unitName = "persistenceUnit", type = PersistenceContextType.TRANSACTION) 
    private EntityManager manager; 

    @PersistenceContext(unitName = "persistenceUnit", type = PersistenceContextType.TRANSACTION) 
    public void setEntityManager(EntityManager manager) { 
     this.manager = manager; 
    } 

    public EntityManager getEntityManager() { 
     if (manager == null) { 
      throw new IllegalStateException("EntityManager has not been set on DAO before usage"); 
     } 

     return manager; 
    } 

    @SuppressWarnings("unchecked") 
    public List retrieveAll() throws Exception { 
     EntityManager em = getEntityManager(); 

     List result = em.createQuery("FROM TestEntity").getResultList(); 

     if (result == null) { 
      result = new ArrayList(); 
     } 

     return result; 
    } 

} 

Je veux que la valeur managerFile soit injectée par JBoss. Voici mon ejb-jar.xml:

<enterprise-beans> 
    <session> 
     <ejb-name>Test</ejb-name> 
     <ejb-class>com.topcoder.test.TestBean</ejb-class> 
     <env-entry> 
      <env-entry-name>managerFile</env-entry-name> 
      <env-entry-type>java.lang.String</env-entry-type> 
      <env-entry-value>com/topcoder/test/TestBean.properties</env-entry-value> 
     </env-entry> 
    </session> 
</enterprise-beans> 

Mais je reçois ce message d'erreur lorsque je déploie mon oreille à JBoss:

09: 07: 40495 WARN [ResourceHandler] Non injection managerFile, pas enc correspondant injecteur env/managerFile trouvé

Je cours JBoss 4.2. Qu'est-ce que je fais mal?

Répondre

1

Assurez-vous que le fichier ejb-jar.xml se trouve dans le fichier META-INF/du fichier JAR dans lequel se trouvent vos fichiers EJB, et non dans le fichier META-INF du fichier EAR.

Rien à voir avec votre problème, vous pouvez retirer le:

@PersistenceContext 

de votre méthode setEntityManager() (vous n'êtes pas obligé de annoter à la fois et le champ entityManager)

+0

Merci pour votre réponse. J'ai changé le Test en TestBean sur l'annotation @Stateless, mais j'ai toujours la même erreur: [ResourceHandler] Pas d'injection de gestionnaireFichier, aucun injecteur enc correspondant env/gestionnaireFichier trouvé D'autres idées? – dcp

+0

Etes-vous sûr que le fichier ejb-jar.xml se trouve dans le répertoire META-INF/JAR de votre JAR? Si je n'ai pas inclus le , j'obtiens la même erreur, donc votre problème peut être un problème de déploiement. – mtpettyp

+0

J'ai un répertoire de l'oreille que j'ai déployé sur JBoss, et sous ce dossier auriculaire j'ai un dossier META-INF. Le fichier ejb-jar.xml se trouve dans le dossier META-INF. – dcp