2011-03-31 32 views
0

我正試圖編寫一個代理來從Java的本地HttpServlet容器中調用遠程servlet對象,並且我以某種方式與Howtos卡住了。序列化代理對象以訪問遠程servlet

第一步,我試着編寫一個擴展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.init(ServletConfig類)子句

我不completeley知道是否/如何我能找到從本地servlet容器一個servlet對象的遠程調用的解決方案。換句話說,考慮到HttpServletRequest,HttpServletResponse等的序列化需求,我想知道我想實現的是否可行?

任何提示高度讚賞。

+1

這聽起來像是一個非常複雜的解決一個簡單的問題。你試圖解決的問題究竟是什麼? – biziclop 2011-03-31 23:19:01

+0

這實際上是一個複雜的問題。我正在嘗試開發一種工具,在兩臺機器上動態分配JEE Web應用程序,其中根據最初單一的JEE應用程序的類之間交換的數據量來識別分佈邊界。這更像是一個研究問題,我意識到更簡單的選擇;但不知爲什麼我的想法會起作用。在理論上,我應該能夠在應用足夠的抽象和序列化之後通過RMI分發每個Java類。我的目標是在我的解決方案中實踐理論。 – nemo 2011-04-01 00:06:59

+0

好吧,我不會判斷你在做什麼。然而,我會指出,你將需要能夠遠程代理流(請求和響應兩個工作與流)。你應該看看rmiio項目,它將使你能夠通過rmi使用流。 – jtahlborn 2011-04-01 00:31:23

回答

0

您不需要使遠程接口實現Servlet。相反,只是模仿遠程接口中的方法。然後編寫一個servlet存根類,將所有調用委託給遠程代理。顯然,您需要將RemoteExceptions封裝在可以從Servlet方法拋出的其他異常中。

如果你想以通用的方式做到這一點,那麼你可以實現一個java.lang.Proxy處理程序,它爲你執行委託(匹配Servlet接口方法和相關的Remote版本)。

+0

謝謝@jtahlborn。我得出了一個類似的結論,與同事討論了這個問題。將在今晚或明天嘗試它,然後回來......;) – nemo 2011-04-01 01:32:47

+0

實際上,如果您使用的是動態代理,則可以實現Servlet接口。你不必實現的是Remote接口,因爲調用處理器可以處理所有的遠程操作。 – biziclop 2011-04-01 09:29:48

+0

@bizicolp感謝您的額外提示。我只是把我的腳弄溼了。將在這裏報告成功。 – nemo 2011-04-01 19:45:14