2008年9月9日 星期二

JBoss AS 的 EJB 3.0 的命名衝突

JBoss AS 的 EJB 3.0 Support 一直做的都還不錯,所以上課的時候我很喜歡拿它來作示範。

前幾天發生一個狀況:程式明明沒錯,部署起來也沒看到什麼明顯的錯誤訊息,但是執行就是會有問題,一直抱怨找不到一些方法,可是我明明就有寫。

後來發現,我是直接部署 JAR 檔案,所以 Session Bean 的名稱預設就是 ClassName/remote 或 ClassName/local,因為我在兩個不同的 EJB Module 裡面定義了相同名稱、不同功能的 Session Bean,所以其中一個實際上並沒有部署成功。結果程式執行的時候,一直找到另一個功能不相同的同名 Session Bean,所以才會出問題。

解決方法是,要嘛把另一個有同名 Session Bean 的 EJB Module 移除,不然就是不要直接部署 EJB Module,先定義 Enterprise Application,加入 EJB Module 之後再部署,這樣 SessionBean 的預設命名方式就會變成 EARName/ClassName/remote 或 EARName/ClassName/local,也就不會產生命名衝突了!

沒有留言: