Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > ошибка при вызове функции get... EntityBean'а


Автор: hariton594 8.10.2006, 15:11
Я использу JBoss v 4.0.4
Есть EntityBean - PointsBean (Points - локальный интерфайс). Есть SessionBean - HaritonBean, с методом getPoints():
Код

public Collection getPoints() {
        PointsHome pointsHome = null;

        Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY,
                  "org.jnp.interfaces.NamingContextFactory");
        props.put(Context.PROVIDER_URL, "localhost:1099");

        Collection col = null;

        try {
            Context ctx = new InitialContext(props);
            Object obj = ctx.lookup("Points");

            pointsHome = (PointsHome) PortableRemoteObject.narrow(
                    obj, PointsHome.class);

            col = pointsHome.findAllPoints();
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        return col;
    }


Есть JSP, использующая HaritonBean
Код

<html>
<head>
<title> with JBoss </title>
</head>
<%@ page import="firstejb.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.rmi.*" %>

<body>
<h1>
<%
  Properties props = new Properties();
  props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
  props.put(Context.PROVIDER_URL, "localhost:1099");
  try {
    Context ctx = new InitialContext(props);
    Object obj  = ctx.lookup("HaritonBean");
    
    HaritonHome rhome = (HaritonHome) PortableRemoteObject.narrow(obj, HaritonHome.class);
    Hariton rhello = rhome.create();
    
    Iterator iter = rhello.getPoints().iterator();
    
    while (iter.hasNext()) {
      Points point = (Points)iter.next();
      
      out.println(point.getName());
    }
    
    
    rhello.remove();
  } catch(Exception e) {
    out.println(e.toString());
    
  }
%>
</h1>
</body>
</html>


При  отображении JSP вылезает ошибка:
Код

 EJBException in method: public abstract java.lang.String firstejb.Points.getName():
javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract java.lang.String firstejb.Points.getName()
    at org.jboss.ejb.EntityContainer$ContainerInterceptor.invoke(EntityContainer.java:1167)
    at org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.invoke(JDBCRelationInterceptor.java:87)
    at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:284)
    at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158)
...


Что делать - не знаю. Протестировал удаленным клиентом - все работает

Автор: tux 8.10.2006, 16:15
Возможно, проблема том, что EJB-контейнер и веб-контейнер (Tomcat) загружают классы, используя разные класслоудеры. Попробуй в файлике JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml установить параметр UseJbossWebLoader в значение true. Это заставит Tomcat использовать общий с контейнером EJB загрузчик классов, а не свой собственный. Еще почитай вот эту http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossClassLoadingUseCases, возможно в ней найдешь решение если мой совет не поможет.

Автор: hariton594 8.10.2006, 17:50
Спасибо за ответ, параметр паменял, но прбюлема осталась.Сейчас буду разбираться со статейкой

Автор: hariton594 8.10.2006, 18:26
Огромное спасибо. Поменял параметр на true  - все работает, только раньше WebModule и EJBModule были запакованы в ear-архив, теперь они раздельно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)