jboss 5 ejb2.1 поиск из класса действия Struts вызывает ClassCastException - PullRequest
1 голос
/ 24 августа 2011

У меня ejb 2.1 развернут на сервере JBOSS 5. Имя jndi ejb/DemoEJB и оно соответствует jmx-console tree в jboss. В то время как я пытаюсь найти класс действий 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>

трассировка стека

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Я думаю, что вызов jndi вернул бы класс DemoEJB.DemoEJBHome, а не DemoEJB, следовательно, исключение classcast.

Попытка:

DemoEJBHome home =  (DemoEJBHome)ctx.lookup("ejb/DemoEJB");
DemoEJB demoEjb = home.create();
1 голос
/ 24 августа 2011

после запуска jboss (я полагаю, правильно), попробуйте посмотреть, успешно ли развернут ваш EJB и, если да, где именно в дереве JNDI он находится.Я бы проверил jndi-представление с вашей консоли jmx (по крайней мере, так было в jboss 4.x).Это даст вам представление о том, что искать в вашем jndi-коде.

Конечно, это может быть также отсутствие некоторого jar в вашем клиентском коде (где развернуты Struts).Таким образом, ошибка возникает во время самого поиска.В этом случае, как сказал доктор UnitTest, трассировка стека будет высоко оценена :) Удачи!

...