1

Glassfishで実行するストラットアクションにCDIを使用しようとしました。しかし、Javaの依存性注入は機能しません。JSFでは機能しますが、ストラットでは機能しません。私が読んだように、containerは、コンテナー管理対象Bean(コンテナーによって作成されたBean)の任意のインスタンスに依存関係を注入します。

では、「コンテナ管理Bean」とは何ですか?POJOはありますか?または、jsf back bean、ejb-beanなどだけですか?

そしてそれはどのように起こりますか?Glassfishには、注入するための特別なクラスローダーがありますか?

4

1 に答える 1

3

CDI Bean をマネージド クラスにのみ注入できます。Struts は独自のインスタンスを作成するため、Struts Bean はコンテナーで管理されません。

Struts に CDI Bean を注入できるプラグインがあるかどうかはわかりませんが、JNDI ツリーで Bean Manager を検索できます。

public BeanManager getBeanManager() {
    try {
        Context jndiContext = new InitialContext();
        return (BeanManager) jndiContext.lookup("java:comp/BeanManager");
    } catch (NamingException e) {
        // handle the exception
    }
}

アプリケーションでは、これを使用できます。

BeanManager manager = BeanManagerUtil.getBeanManager();
manager.getBeans(MyClass.class); 

getBeans メソッドによって返される各 Bean に対して、Bean 参照を取得する必要があります

CreationalContext ctx = manager.createCreationalContext(bean);
MyClass myClass = manager.getReference(bean, MyClass.class, ctx);

よろしく

于 2011-02-08T14:18:32.047 に答える