@EJB アノテーション (および @Resource、@WebServiceRef など) には、次の 2 つの目的があります。
コンポーネントの名前空間で参照を宣言します。たとえば、@EJB(name="myEJB") は参照 java:comp/env/myEJB を作成します。フィールドに注釈を付けて名前を指定しない場合、参照 java:comp/env/com.example.MyClass/myField が作成されます。注釈がフィールドまたはセッター メソッドで宣言されている場合、コンテナーはコンポーネントの作成時に注入を実行します。参照がルックアップ ("java:comp/env/myEJB") のために解決されているか、インジェクションのために解決されているかに関係なく、参照がどのように解決されるかは異なります。
EE 6+ が使用されている場合、ルックアップ属性には、ターゲットを解決するための JNDI ルックアップが必要です。一部のアプリケーション サーバーは、ベンダー固有に指定されている MappedName をサポートしています。これは通常、ルックアップを実行することによって実装されます。アプリケーション サーバーは、展開時にバインディングをサポートします。これは通常、ルックアップを実行することによって実装されます。他のバインディング情報が提供されず、Bean インターフェース (beanInterface またはフィールド タイプ) がアプリケーション内の単一の EJB によってのみ実装されている場合、EJB 仕様では、それにフォールバックする必要があります。他のバインディング情報が提供されず、#4 が機能しない場合、一部のアプリケーション サーバーは、ref 名に基づいてサーバーの名前空間でルックアップを実行しようとします (たとえば、java:comp/env/myEJB は、サーバー名前空間)。