2011-08-24 31 views
1

我在JBOSS 5服務器中部署了ejb 2.1。 jndi的名字是ejb/DemoEJB,它與jboss中的jmx-console tree相匹配。當我嘗試在struts action class中查找時,它會拋出ClassCastException。請讓我知道,如果有任何不同的方式來查找。 ejb jar是單獨部署的,它不在ear文件中。jboss 5 ejb2.1從struts action class中查找原因ClassCastException

Properties env = new Properties(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
     env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
     env.put(Context.PROVIDER_URL, url); 
     InitialContext ctx = new InitialContext(env); 
DemoEJB demoEjb = (DemoEJB)ctx.lookup("ejb/DemoEJB"); 

ejb-jar.xml中

<?xml version = '1.0' encoding = 'windows-1252'?> 
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> 
<ejb-jar> 
    <enterprise-beans> 
    <session> 
     <description>Session Bean (Stateless)</description> 
     <display-name>DemoEJB</display-name> 
     <ejb-name>DemoEJB</ejb-name> 
     <home>DemoEJB.DemoEJBHome</home> 
     <remote>DemoEJB.DemoEJB</remote> 
     <ejb-class>DemoEJB.impl.DemoEJBBean</ejb-class> 
     <session-type>Stateless</session-type> 
     <transaction-type>Container</transaction-type> 
    </session> 

的jboss.xml

<?xml version = '1.0' encoding = 'UTF-8'?> 
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_5_0.dtd"> 
<jboss> 
    <session> 
     <ejb-name >DemoEJB</ejb-name> 
     <jndi-name>ejb/DemoEJB</jndi-name> 
     <local-jndi-name >ejb/DemoEJB</local-jndi-name> 
     <ejb-ref>DemoEJB.DemoEJB </ejb-ref> 
     <ejb-local-ref>DemoEJB.DemoEJBHome</ejb-local-ref> 
    </session> 

</jboss> 

堆棧跟蹤

+0

我認爲堆棧跟蹤將是有益的:) – DXTR66

+0

@ Dr.UnitTest:添加堆棧跟蹤。 –

回答

1

我認爲jndi調用將返回DemoEJB.DemoEJBHome類,而不是DemoEJB,因此classcast異常。

嘗試:

DemoEJBHome home = (DemoEJBHome)ctx.lookup("ejb/DemoEJB"); 
DemoEJB demoEjb = home.create(); 
+0

謝謝mglauche哦!上帝,我完全忘了ejb :(在搬到春天之後。 –

1

jboss的開始後s(我假設正確),試着看看你的EJB是否成功部署,如果是的話,它確切地在它駐留的JNDI樹中。我會從你的jmx控制檯檢查jndi-view(至少在jboss 4.x中是如此)。這會給你一個在你的jndi代碼中查找什麼的概念。

當然,這也可能是您的客戶端代碼中缺少某些jar(部署struts的地方)。所以在查找本身期間發生錯誤。在這種情況下,像UnitTest博士說的那樣,stacktrace將受到高度讚賞:)祝你好運!

+0

:在我的問題中,我提到jndi視圖從你的jmx控制檯指向「ejb/DemoEJB」 –

相關問題