問題: 他の2つのクラス(サーブレット)で注入した2つのサブクラスを持つBean(フィルタ内)を注入すると、予期しない動作が発生しました。注入されたスーパークラスは、実行時にサブクラスインスタンスへの参照を保持できるようになりました(各コンテナが再起動されると変更されます)。注入されたスーパークラスBeanは、間違ったインスタンス(サブクラスBeanインスタンス)をどのように注入できますか?
私は重大な間違いをしているに違いないが、正確には何かを理解することはできない。
追加情報:私はサブクラスの1以上にランダムなインスタンスを保持しているスーパークラスを注入フィルタで
:
私は、Java EE6
クラス構造を使用しますスーパークラス:
@EJB
private ClientLogger clientLogger;
su私は私のサーブレットの一つに注入
@Stateless
@LocalBean
public class ClientLogger implements HcpEntityBeanLogger<Client> {
private Client client;
public ClientLogger(){
}
....
}
このサブクラス豆:
@Stateless
@LocalBean
public class AdminClientLogger extends ClientLogger {
public AdminClientLogger(){
}
...
}
ソリューションの試み:
だから、限り、私はそのサブクラスを理解するように、このようなクラスとなって開始あたり最後に注入されたものがclientLoggerによって参照されるインスタンスになりますが、なぜ、3つの異なるインスタンスを持ち、継承を使用できないのですか?
編集: すべて同じインターフェイスを実装する複数のクエリBeanを注入すると、この問題が再び発生しました。すべて同じインスタンスへの参照を保持します。
ソリューションは、あなたが@EJB注釈に検索属性を使用し、注入された必要なサブクラスを取得することができEJB
@EJB(beanName="name of your bean class or name specified in @Stateless(name=".."))