7.8.2. Résolution de référence EJB

Cette section explique comment JBoss implémente @EJB et @Resource. Veuillez noter qu'XML remplace toujours les annotations, mais que les mêmes règles s'appliquent.

Règles pour les annotations @EJB

  • L'annotation @EJB possède également un attribut mappedName(). La spécification le considère comme une métadonnée spécifique au fournisseur tandis que JBoss reconnait mappedName() en tant que nom JNDI global du EJB que vous référencez. Si vous avez indiqué un mappedName(), alors tous les autres attributs seront ignorés et ce nom JNDI global sera utilisé comme liaison.
  • Si vous indiquez @EJB sans attributs définis :
    @EJB 
    ProcessPayment myEjbref;
    Alors les règles suivantes vont s'appliquer :
    • Le jar EJB du bean de référencement est analysé pour trouver un EJB avec l'interface utilisée dans l'injection @EJB. S'il existe plus d'un EJB qui publie la même interface commerciale, alors une exception apparaîtra. S'il n'y a qu'un seul bean dans cette interface, alors celui-là sera utilisé.
    • Chercher l'EAR des EJB qui publient cette interface. S'il y a des doubles, alors il y aura une exception. Sinon le bean correspondant sera renvoyé.
    • Chercher globalement dans le runtime de JBoss un EJB de cette interface. Une fois de plus, s'il y a des doubles, il y aura une exception.
  • @EJB.beanName() correspond à <ejb-link>. Si le beanName() est défini, il vous faudra utiliser le même algorithme que @EJB sans attribut défini mis à part beanName() comme une clé de la recherche. Il existe une exception à cette règle si vous utilisez la syntaxe ejb-link '#'. La syntaxe '#' vous permettra de mettre un chemin d'accès relatif dans un jar de l'EJB qui contient l'EJB de référencement. Reportez-vous à la spécification EJB 3.1 pour plus de détails.