entity-layer-EAR に EJB をセットアップしました。
<session>
<ejb-name>DoctorDaoImpl</ejb-name>
<business-local>mypath.DoctorDao</business-local>
<ejb-class>mypath.DoctorDaoImpl</ejb-class>
<session-type>Stateless</session-type>
</session>
ログによると、EAR とその EJB は正常に起動します。共有ライブラリにファサード (DoctorDao など) があり、エンティティ層 EAR には実装 (DoctorDaoImpl など) があります。
Doctor サービスを展開すると、DoctorDataEjb が DoctorDao を注入する data-service.jar があります。
しかし、次のようなエラーが表示されます。
Doctor アプリケーションの data-service.jar モジュールの DoctorDataEjb コンポーネントの mypath.DoctorDao EJB 参照を解決できませんでした。ネストされた例外: com.ibm.ejs.container.EJBNotFoundException: インターフェース mypath.DoctorDao を持つ EJB がアプリケーション Doctor に存在しません
ここで、EJB が Doctor アプリケーションに存在しないことに気付きました。これは、entity-layer-EAR に存在します。同様のこのリンクを見たので、「EJB 参照」WAS 管理 UI に入力する正しいバインディング名を作成する必要があると思います (または、ibm-ejb-jar-bnd. xml)。
生成された ejb-jar_merged.xml を見ると、ref が次のように定義されていることがわかります。
<ejb-ref>
<ejb-ref-name>mypath.DoctorDao</ejb-ref-name>
<remote>mypath.DoctorDao</remote>
<injection-target>
<injection-target-class>mypath.DoctorDataEjb</injection-target-class>
<injection-target-name>doctorDao</injection-target-name>
</injection-target>
</ejb-ref>
ターゲット リソース JNDI 名を java:global/MyEntityLayerApp/entity-service/DoctorDaoImpl!myPath.DoctorDao に設定しようとしましたが、次のようになりました: java.lang.IllegalArgumentException: MyPath.DoctorDao フィールド myPath.DoctorDataEjb.doctorDao を myPath に設定できません。 EJSLocal0SLDoctorDaoImpl_
ゾイク。「ローカル」についての何か。