1

我在 JBOSS 5 服务器中部署了 ejb 2.1。jndi 名称是ejb/DemoEJB并且它与jmx-console treejboss 中的匹配。当我尝试按如下方式在 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>

堆栈跟踪

4

2 回答 2

1

我认为 jndi 调用将返回 DemoEJB.DemoEJBHome 类,而不是 DemoEJB 类,因此是类转换异常。

尝试:

DemoEJBHome home =  (DemoEJBHome)ctx.lookup("ejb/DemoEJB");
DemoEJB demoEjb = home.create();
于 2011-08-24T08:42:34.223 回答
1

在 jboss 启动后(我假设正确),尝试查看您的 EJB 是否已成功部署,如果是,它在 JNDI 树中的确切位置。我会从您的 jmx 控制台检查 jndi-view(至少在 jboss 4.x 中是这样)。这将使您了解要在 jndi 代码中查找的内容。

当然,这也可能是您的客户端代码(部署了 struts)中缺少一些 jar。因此错误发生在查找本身期间。在这种情况下,就像 UnitTest 博士所说的那样,堆栈跟踪将受到高度赞赏:) 祝你好运!

于 2011-08-24T08:24:33.677 回答