7.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 仕様を参照してください。