7.7.2. EJB 参照の解決
本項では、JBoss が
@EJB や @Resource を実装する方法について説明します。XML は常にアノテーションを上書きしますが、同じルールが適用されることに注意してください。
@EJB アノテーションのルール
@EJBアノテーションはmappedName()属性を持っています。仕様はこのベンダー固有のメタデータを無視しますが、 JBoss は参照しているEJBのグローバル JNDI 名としてmappedName()を認識します。mappedName()を指定した場合、他の属性はすべて無視され、このグローバル JNDI 名がバインディングに使用されます。- 以下のように属性を定義せずに
@EJBを指定するとします。@EJB ProcessPayment myEjbref;
@EJB ProcessPayment myEjbref;Copy to Clipboard Copied! Toggle word wrap Toggle overflow この場合、次のルールが適用されます。- 参照する 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 仕様を参照してください。