2011-09-29 102 views
5

我正在學習J2EE和EJB,並且遇到了一個奇怪的問題。這是我的項目設置:在(引用)Web項目中找不到引用EJB項目的類

我使用的是Glassfish 3.1和Eclipse 3.7。我在Eclipse兩個項目:

  1. 一個EJB 3.0兼容的項目,myEjbProject
  2. 一個動態Web項目,myWebProject

我從myEjbProject注入一個EJB會話bean mySessionBeanPackage.mySessionBean成servlet myServletPackage.myServletmyWebProject中,然後(在servlet中)調用會話bean中定義的簡單方法。

我提供了myWebProject參考myEjbProject(使用屬性 - >項目引用對話框)。但是,出於某種原因,服務器是無法找到會話bean。我得到的確切錯誤是:

SEVERE:未找到類[LmySessionBeanPackage/mySessionBean]。加載時出錯[類myServletPackage.myServlet]

注意 EJB項目和Web項目已發佈到服務器,我已經反覆檢查爲bean生成的類文件,實際上,存在於服務器上(所以我想不出爲什麼服務器無法找到它們)。

誰能告訴我我做錯了什麼?

我也試過

  • 加入myEjbProject類文件夾明確到Java構建路徑 - 的myWebProject>庫列表。這是除了項目參考之外(儘管我認爲首先添加項目參考應該是足夠的)。無論如何,它沒有區別(和以前一樣的錯誤信息)。

  • 使用Export - > EJB Jar File選項(我不想寫入Ant腳本)創建一個來自myEjbProject的JAR文件。然後,我將這個JAR放入了myWebProject的Java Build Path - > Libraries部分。這種方法也不能解決問題(與以前相同的錯誤信息)。

  • 修改所述會話bean具有

    • 沒有界面
    • 本地接口
    • 遠程接口

    和相應地修改注射。例如。,對於只有一個本地接口的bean,我用:

    @EJB mySessionBeanPackage.mySessionBeanLocal myBean

    這種做法並沒有解決問題,或者(同樣的錯誤消息之前)。

  • 完全廢除myEjbProject,並將會話bean添加到myWebProject作爲myServletPackage.mySessionBean(與servlet的包相同)。在這種情況下,我可以使用

    @EJB mySessionBeanPackage.mySessionBean myBean

  • myEjbProject廢除乾脆加入會話bean myWebProjectmySessionBeanPackage.mySessionBean(新包裝)成功注入會話bean到servlet。在這種情況下,我能成功注入會話bean到使用

    @EJB mySessionBeanPackage.mySessionBean myBean

回答

12

我建議考慮看看實際的EAR了Eclipse包的servlet和部署到服務器。您可以通過導出EAR項目(右鍵單擊EAR項目 - >導出 - > Java EE - > EAR文件)執行此操作

我認爲您缺少的步驟是將EJB項目添加到WEB項目的MANIFEST文件。但是,如果您錯過了幾個步驟,我會檢查以下內容:

  1. EJB和WEB項目是EAR項目的模塊。右鍵單擊EAR項目 - >屬性 - >部署程序集 - >添加 - >項目 - >選擇EJB和WEB項目。如果您現在導出您的EAR項目,您會注意到EJB和WEB項目與EAR一起打包。
  2. 將EJB項目添加到WEB項目的MANIFEST。右鍵單擊WEB項目 - > properties - > Deployment Assembly - > Manifest entries - > Add - >選擇EJB項目。您可以打開MANIFEST.MF文件並查看它現在包含EJB項目。

另外我喜歡將EJB項目添加到WEB項目構建路徑中,以便它包含在WEB的類路徑中:右鍵單擊WEB項目 - >屬性 - > Java構建路徑 - >項目 - >添加 - >選擇EJB。

+1

第2號爲我做了詭計。謝謝你,謝謝你,謝謝你! :) 我還沒有創建EAR項目,因爲我認爲我會開始簡單。最後一行,是的,我已經有了。乾杯。 –

+0

優秀! #2爲我挽救了更多的頭髮。謝謝! –