2

JBoss が環境変数値を Bean に注入するのに問題があります。これが私のBeanクラスです:

パッケージ com.topcoder.test;

import java.util.ArrayList;
java.util.List をインポートします。

import javax.annotation.Resource;
javax.ejb.EJBContext をインポートします。
javax.ejb.Remote をインポートします。
javax.ejb.SessionContext をインポートします。
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
javax.naming.Context をインポートします。
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.persistence.EntityManager;
javax.persistence.PersistenceContext をインポートします。
import javax.persistence.PersistenceContextType;

org.jboss.annotation.ejb.RemoteBinding をインポートします。

com.topcoder.test.Test をインポートします。

public @Stateless(name = "TestBean")
クラス TestBean はテストを実装します {

    @Resource(name="managerFile")
    プライベート文字列 managerFile;

    public String getManagerFile() {
        managerFile を返します。
    }

    public String testMethod() {
        String ret = "testMethod() の managerFile の値は " + getManagerFile();
        retを返します。
    }

    @PersistenceContext(ユニット名 = "persistenceUnit"、タイプ = PersistenceContextType.TRANSACTION)
    プライベート EntityManager マネージャー。

    @PersistenceContext(ユニット名 = "persistenceUnit"、タイプ = PersistenceContextType.TRANSACTION)
    public void setEntityManager(EntityManager マネージャー) {
        this.manager = マネージャー;
    }

    public EntityManager getEntityManager() {
        if (マネージャー == null) {
            throw new IllegalStateException("EntityManager は使用前に DAO に設定されていません");
        }

        リターンマネージャー;
    }

    @SuppressWarnings("未チェック")
    public List retrieveAll() は例外をスローします {
        EntityManager em = getEntityManager();

        リスト結果 = em.createQuery("FROM TestEntity").getResultList();

        if (結果 == null) {
            結果 = 新しい ArrayList();
        }

        結果を返します。
    }

}

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 に ear をデプロイすると、次のエラー メッセージが表示されます。

09:07:40,495 WARN [ResourceHandler] managerFile を注入していません。一致する enc インジェクター env/managerFile が見つかりません

JBoss 4.2 を実行しています。私は何を間違っていますか?

4

1 に答える 1

1

ejb-jar.xmlが、EARのMETA-INFではなく、EJBが含まれるJARのMETA-INF/にあることを確認してください。

問題とは関係なく、以下を削除できます。

@PersistenceContext

setEntityManager()メソッドから(メソッドとentityManagerフィールドの両方に注釈を付ける必要はありません)

于 2009-05-19T14:19:26.877 に答える