вопрос по EJB и внедрению ресурсов - PullRequest
2 голосов
/ 19 мая 2009

У меня проблемы с получением JBoss для ввода значения переменной среды в bean-компонент. Вот мой класс бобов:

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

}

Я хочу, чтобы значение managerFile было введено JBoss. Вот мой 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>

Но я получаю это сообщение об ошибке при развертывании моего уха на JBoss:

09: 07: 40,495 ПРЕДУПРЕЖДЕНИЕ [ResourceHandler] Не вставляет файл managerFile, не найден соответствующий enc / manager инжектора encile. Файл найден

Я использую JBoss 4.2. Что я делаю не так?

1 Ответ

1 голос
/ 19 мая 2009

Убедитесь, что ejb-jar.xml находится в META-INF / JAR, в котором находятся ваши EJB, а не в META-INF EAR.

Не относясь к вашей проблеме, вы можете удалить:

@PersistenceContext

из вашего метода setEntityManager () (вам не нужно аннотировать его и поле entityManager)

...