Удаленный вызов метода ejb с параметром, расширенным для результатов клиента с ClassNotFoundException.Удаленный вызов метода ejb с абстрактным параметром
Например:
@Stateless
public class EjbService implements EjbServiceRemote {
public void doSth(SomeAbstractClass sac) {
//do sth with sac
}
}
@Remote
public interface EjbServiceRemote {
public void doSth(SomeAbstractClass sac);
}
package com.simple;
public class SimpleEJBTestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
EjbServiceRemote ejbRemote = //lookup stuff
SomeAbstractClass sac = new SomeAbstractClass {}; //extend it
ejbRemote.doSth(sac); //results in ClassNotFound
}
}
Исключение:
Servlet.service() for servlet SimpleEJBTestServlet threw exception: java.lang.RuntimeException: JBAS014154: Failed to marshal EJB parameters
java.lang.ClassNotFoundException: com.simple.SimpleEJBTestServlet$1 from [Module "deployment.simpleEjbService.ear.simpleEjb:main" from Service Module Loader]
SomeAbstractClass находится в пути к классам клиентских и удаленных приложений, но они загружаются с различными загрузчиков классов (очевидно).
Ожидается ли такое поведение или я что-то упускаю? Как я могу решить этот случай?
Но «вещь», которую я отправляю путем сериализации, - это SomeAbstractClass, и она находится в пути к классам как удаленных, так и клиентских приложений. Почему имеет значение, как я расширяю или реализую его на клиенте? – Reek
Нет, вы отправляете объект с конкретным динамическим типом (динамическое статическое типирование <->). Что бы вы ожидали, что время выполнения, динамический тип объекта на стороне клиента должно быть? Объект не может иметь абстрактный тип ... – Puce
Тогда это означает: 1) я не могу использовать интерфейсы или абстрактные классы в качестве параметров метода ejb или 2) мне нужно поделиться сведениями о реализации клиента с удаленным приложением, что не имеет ничего общего с ними – Reek