Я работаю над устаревшей системой, в которой есть удаленный компонент, который стал слишком большим и монолитным, и я хотел бы отделить новую функциональность, которую мне нужно добавить.
Моя первоначальная идея заключалась в том, чтобы вместо добавления новых методов в существующий интерфейс создать новый интерфейс со всеми моими материалами и добавить единственный метод, который возвращает удаленный объект, реализующий мой интерфейс.
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я вызываю метод, который возвращает мой объект, среда выполнения пытается его сериализовать вместо отправки заглушки.
Структура кода более или менее такова:
@Stateless
public class OldBean implements OldRemoteInterface {
//lots of the old unrelated methods here
public MyNewStuff getMyNewStuff() {
return new MyNewStuff();
}
}
@Remote
public interface OldRemoteInterface {
//lots of the old unrelated methods declared here
MyNewStuff getMyNewStuff();
}
public class MyNewStuff implements NewRemoteInterface {
//methods implemented here
}
@Remote
public interface NewRemoteInterface {
//new methods declared here
}
И я получаю исключение:
"IOP00810267: (MARSHAL) An instance of class MyNewStuff could not be marshalled:
the class is not an instance of java.io.Serializable"
Я пытался сделать это «по-старому», расширяя интерфейс java.rmi.Remote
вместо использования аннотации ejb @Remote
, и получаю исключение:
"IOP00511403: (INV_OBJREF) Class MyNewStuff not exported, or else is actually
a JRMP stub"
Я знаю, что, должно быть, мне не хватает чего-то, что должно быть очевидным ...: - /