我有一個EJB在我的實體層-EAR設置:EAR找不到另一隻耳朵的EJB(WAS的共享庫的問題)
<session>
<ejb-name>DoctorDaoImpl</ejb-name>
<business-local>mypath.DoctorDao</business-local>
<ejb-class>mypath.DoctorDaoImpl</ejb-class>
<session-type>Stateless</session-type>
</session>
根據日誌,耳朵和EJB的開始很好。我有共享庫中的Facade(例如DoctorDao),實體層EAR具有實現(例如DoctorDaoImpl)。
現在,當我部署我的Doctor服務時,它有一個DoctorDataEjb注入DoctorDao的data-service.jar。
,但我得到一個錯誤說:
在醫生應用程序的數據service.jar中模塊中的組件DoctorDataEjb的mypath.DoctorDao EJB引用無法解析。嵌套的異常是:com.ibm.ejs.container.EJBNotFoundException:具有接口mypath.DoctorDao的EJB在應用程序中不存在
現在,我意識到EJB確實不存在於Doctor應用程序中。它存在於實體層EAR中。我見過這個link,這是相似的,所以我想我必須制定出正確的綁定名稱來輸入「EJB引用」WAS管理界面(或者我可以在ibm-ejb-jar-bnd中設置它。 XML)。
如果我查看生成的ejb-jar_merged.xml,我看到裁判如此定義:
<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:全球/ MyEntityLayerApp /實體 - !服務/ DoctorDaoImpl myPath.DoctorDao 現在得到: java.lang.IllegalArgumentException異常:無法設置myPath.DoctorDao場myPath.DoctorDataEjb.doctorDao到myPath.EJSLocal0SLDoctorDaoImpl_
zoiks。關於'本地'的東西。
感謝馬科斯,真是個蠢人。接口Dao具有方法並且是Local,那麼DaoRemote(擴展Dao)是空的並且是Remote,然後我們所有的EJB都擴展DaoRemote。所以我認爲DoctorDao會繼承Remote,但我想它實際上是Local。但是我粘貼的ejb-jar_merged是由WAS生成的。所以很明顯DoctorDao是本地的東西。讓我看看是否改變這個(對於一個本地和一個遠程擴展的共同基地道)是有幫助的。 – djb 2013-05-09 08:20:20
它仍然不起作用,所以我們將嘗試直接引用命名的ejbs。我認爲如果可以的話,我們只是要回避這個整體的EJB-in-another-EAR業務。每個EAR只需將實體層切割成一個EJB。 – djb 2013-05-09 09:24:01
好的,所以我能夠實現它的唯一方法就是在WAS UI中命名EJB,然後在UI中映射到其他服務的名稱。看起來很古老。似乎沒有其他辦法。如我錯了請糾正我。所以我們將不得不重構一切:/ – djb 2013-05-09 13:19:01