6.7.2. EJB 参照の解決

本項では、JBoss が @EJB@Resource を実装する方法について説明します。XML は常にアノテーションを上書きしますが、同じルールが適用されることに注意してください。

@EJB アノテーションのルール

  • @EJB アノテーションは mappedName() 属性を持っています。仕様はこのベンダー固有のメタデータを無視しますが、 JBoss は参照しているEJBのグローバル JNDI 名としてmappedName() を認識します。mappedName() を指定した場合、他の属性はすべて無視され、このグローバル JNDI 名がバインディングに使用されます。
  • 以下のように属性を定義せずに @EJB を指定するとします。
    @EJB 
    ProcessPayment myEjbref;
    この場合、次のルールが適用されます。
    • 参照する Bean の EJB jar が、@EJB 挿入に使用されるインターフェースを持つ EJB に対して検索されます。同じビジネスインターフェースをパブリッシュする EJB が複数ある場合、例外がスローされます。インターフェースを持つ Bean が 1 つのみである場合はその Bean が使用されます。
    • そのインターフェースをパブリッシュする EJB に対する EAR を検索します。複製がある場合は例外がスローされます。それ以外の場合は、一致する Bean が返されます。
    • JBoss でそのインターフェースの EJB に対してグローバルに検索が行われます。ここでも複製があると例外がスローされます。
  • @EJB.beanName()<ejb-link> に対応します。beanName() が定義されている場合、属性が定義されていない @EJB として同じアルゴリズムが使用されますが、検索で beanName() がキーとして使用されます。ejb-link の # 構文を使用する場合、このルールの例外となります。# 構文は、参照する EJB が存在する EAR の jar への相対パスを指定できるようにします。詳細は EJB 3.1 仕様を参照してください。