2012-05-19 37 views
0

我正在測試一個EJB 2.x應用程序。我創建了2模塊分別分別部署ejb模塊和web模塊時無法訪問bean?

EJB模塊:包含一個簡單的無狀態會話bean

Web模塊:包含一個servlet頁面查找EJB模塊。 我正在使用Jboss 4.2.3

首先,我部署的EJB模塊和部署進展順利。 ,我部署的網絡模塊和部署進展順利。

然後我用下面的代碼來查找EJB模塊:

Context c = new InitialContext(); 
Object o = c.lookup("HelloJNDI"); // Line 1 
HelloLocalHome rv = (HelloLocalHome) o; // Line 2 
HelloLocal local = rv.create(); 

查找順利(Line 1),但Line 2產生了類轉換異常。

然後我在第2個方案中測試上述代碼:

  1. 我打包EJB和Web模塊到單個EAR module。然後,部署此EAR模塊JBoss 4.2.3,和上面的查找代碼工作就像一個魅力。

  2. 我試着用JBoss 5,甚至分別部署了EJB模塊和Web模塊,上面的查找代碼工作得很好。

那麼,爲什麼當我在JBoss 4中單獨部署2個模塊時,事情並沒有解決?我僅使用本地JNDI查找,因爲這兩個模塊部署在同一個容器中。 我錯過了什麼,或者這是JBoss 4中的缺陷?

+0

什麼是ClassCastException異常的全棧(或至少消息)?什麼是o.getClass(),o.getClass()的值。getClassLoader(),和HelloLocalHome.class.getClassLoader()? –

回答

1

嘗試使用下面的代碼,而不是你投:

HelloLocalHome rv = (HelloLocalHome)javax.rmi.PortableRemoteObject.narrow(o, HelloLocalHome.class); 

如果這樣做現在的工作,那麼你有臭名昭著的類加載問題。 (JBoss 5默認服務器使用不同的類加載機制的原因之一)。最容易的是確實將它們放置在單個EAR中(因此,Home和遠程類將加載一次)。您的Web應用程序中的Home接口類由與JNDI返回的類不同的類加載器加載。

您也可以刪除您的WAR文件的類接口或LIB dirrectory

+0

嘗試過,但仍無法正常工作 – ipkiss

+0

已更新答案。 –