Java 序列化代理对象以访问远程servlet

Java 序列化代理对象以访问远程servlet,java,servlets,rmi,Java,Servlets,Rmi,我正试图编写一个代理,用于从Java中的本地HttpServlet容器调用远程servlet对象,但不知怎的,我被Howtos卡住了 在第一步中,我尝试编写一个扩展Servlet和Remote的接口,以便在服务器端,我可以将其注册到Servlet容器中,并使用它作为代理来序列化对驻留在客户机上的Servlet对象的调用。类似于以下代码: public interface IServletRemote extends Remote, Servlet { public void doGet

我正试图编写一个代理,用于从Java中的本地HttpServlet容器调用远程servlet对象,但不知怎的,我被Howtos卡住了

在第一步中,我尝试编写一个扩展Servlet和Remote的接口,以便在服务器端,我可以将其注册到Servlet容器中,并使用它作为代理来序列化对驻留在客户机上的Servlet对象的调用。类似于以下代码:

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与Servlet.initServletConfig中的throws子句不兼容

我不完全确定是否/如何找到从本地servlet容器远程调用servlet对象的解决方案。换句话说,考虑到HttpServletRequest、HttpServletResponse等的序列化要求,我想知道我试图实现的目标是否可行


非常感谢任何提示。

您不需要让远程接口实现Servlet。相反,只需模拟远程接口中的方法即可。然后编写一个小servlet存根类,将所有调用委托给远程代理。显然,您需要将RemoteExceptions包装到其他一些可以从Servlet方法抛出的异常中


如果您希望以通用方式执行此操作,那么您可能可以实现一个java.lang.Proxy处理程序,该处理程序将为您执行委托,使Servlet接口方法与相关的远程版本相匹配。

对于一个简单的问题,这听起来是一个极其复杂的解决方案。你想解决的问题到底是什么?这实际上是一个复杂的问题。我正在尝试开发一种工具,以跨两台机器动态分发JEE Web应用程序,其中分发边界是根据最初单一的JEE应用程序的类之间交换的数据量确定的。这更多的是一个研究问题,我知道更简单的选择;但不知怎的,我很好奇我的想法是否会奏效。理论上,在应用了足够的抽象和序列化之后,我应该能够通过RMI分发每个Java类。我的目标是在我的解决方案中实践这一理论。好吧,我不会对你试图做的事情做出判断。然而,我将指出,您将需要能够对远程代理流进行REQUEST和response,这两者都可以使用流。您应该查看RMIO项目,它将使您能够通过rmi使用流。我明白了,这解释了很多。对不起,我对此持怀疑态度,但如果没有上下文,你的问题看起来有点过于复杂了。@biziclop我同意。很抱歉一开始没有提供足够的背景资料。谢谢@jtahlborn。在与同事讨论这个问题后,我得出了类似的结论。我会今晚或明天试试,然后回来;实际上,如果您使用的是动态代理,则可以实现Servlet接口。您不必实现的是远程接口,因为调用处理程序可以处理所有远程操作。@bizicolp感谢您提供的额外提示。我只是被它弄湿了脚。我们将在这里报告成功的情况。