我在JBOSS 5服务器上部署了ejb 2.1。 jndi名称为ejb/DemoEJB
,与jboss中的jmx-console tree
匹配。当我尝试在struts动作类中查找如下时,它会抛出ClassCastException
。请告诉我,如果有任何不同的查找方式。 ejb jar是单独部署的,它不在ear文件中。
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 :(得分:1)
在jboss启动后(我假设正确),尝试查看您的EJB是否已成功部署,如果是,那么它所在的JNDI树中的确切位置。我会从你的jmx控制台检查一个jndi-view(至少在jboss 4.x中是如此)。这将让您了解在jndi代码中查找的内容。
当然,这也可能是客户端代码中缺少某些jar(部署了struts)。因此在查找本身期间会发生错误。在这种情况下,像UnitTest博士所说,堆栈跟踪将受到高度赞赏:)祝你好运!
答案 1 :(得分:1)
我认为jndi调用将返回DemoEJB.DemoEJBHome类,而不是DemoEJB类,因此返回了classcast异常。
尝试:
DemoEJBHome home = (DemoEJBHome)ctx.lookup("ejb/DemoEJB");
DemoEJB demoEjb = home.create();