注釈 ( ) を持つスーパークラス@Resource
があり、そのスーパークラスを拡張するサブクラスがステートレス Bean であるという問題があります。
これとよく似ていますが、スーパークラスとサブクラスが同じモジュールにある場合、リソースは正常に注入されます。それらが別々のモジュールにある場合、リソースは注入されません - 注釈が処理されないようです。
クラスで注釈が「見える」ことをリフレクションで確認しましたが、 にステップインするとResourceInjectionAnnotationParsingProcessor
、@Resource
注釈は他のモジュールから継承するクラスには表示されません (同じモジュール内にあるクラスには表示されますが) )。
私が見てきた一般的な解決策jandex
はファイルとセットですannotations="true"
が、これは静的モジュール用であり、私たちの場合のような他の展開ではないようです。
もう1 つの提案は、モジュールがアノテーションへの依存関係を欠いている可能性があるというものでしたが、私の例では、関連するすべてのモジュールが に依存していました<module name="javax.annotation.api"/>
。
これらの注釈を個別の展開から「見える」ようにする他の方法はありますか?
最小限の例として、スーパークラスがある場合
import javax.annotation.Resource;
import javax.ejb.SessionContext;
public class BaseResource {
@Resource
private SessionContext sessionContext;
public String getContext() {
return "Context is " + sessionContext;
}
}
とのサブクラス
import javax.ejb.Stateless;
@Stateless
public class ResourceBean extends BaseResource {
public ResourceBean() {
System.out.println(getClass().getName() + " created");
}
}
これらが同じモジュール内にある場合は、SessionContext
が表示されます。個別のモジュールでSessionContext
は、常にnull
です。