Сериализация прокси-объекта для доступа к удаленному сервлету - PullRequest
0 голосов
/ 01 апреля 2011

Я пытаюсь написать прокси для вызова удаленного объекта сервлета из локального контейнера HttpServlet в Java, и я каким-то образом застрял в Howtos.

На самом первом шаге я попытался написать интерфейс, расширяющий как Servlet, так и Remote, чтобы на стороне сервера я мог зарегистрировать его в своем контейнере сервлетов и использовать его в качестве прокси для сериализации вызовов к объекту сервлета на клиенте. Что-то вроде следующего кода:

public interface IServletRemote extends Remote, Servlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws RemoteException;

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws RemoteException;

    public void init() throws RemoteException;

    public void init(ServletConfig config) throws ServletException, RemoteException;

    public void destroy() throws RemoteException;
}

Я не могу пройти мимо построения интерфейса, потому что приведенный выше код приводит к следующей ошибке, которая является разумной, зная ограничения полиморфизма / наследования Java:

RemoteException несовместимо с предложением throws в Servlet.init (ServletConfig)

Я не полностью уверен, смогу ли я найти решение для удаленного вызова объекта сервлета из локального контейнера сервлета. Другими словами, мне интересно, возможно ли достичь того, чего я пытаюсь достичь, учитывая требования сериализации для HttpServletRequest, HttpServletResponse и т. Д.?

Любой намек высоко ценится.

1 Ответ

0 голосов
/ 01 апреля 2011

вам не нужно заставлять удаленный интерфейс реализовывать сервлет.вместо этого просто имитируйте методы в удаленном интерфейсе.затем напишите небольшой класс-заглушку сервлета, который делегирует все вызовы удаленному прокси.очевидно, вам нужно заключить исключения RemoteException в другое исключение, которое может быть выброшено из методов сервлета.

Если вы хотите сделать это в общем виде, то вы, вероятно, можете реализовать java.lang.Прокси-обработчик, который выполняет делегирование для вас (сопоставляя методы интерфейса сервлета с соответствующими версиями Remote).

...