天天看點

研究一下基于osgi的web應用(1)

目前,J2EE的web應用可以說多不勝數,很多 做過J2EE,并開始接觸OSGI的童鞋都會自然而然 地想,如果在OSGI之上該如何建構Web應用。在 這方面,OSGI雖然有一些解決方案,但“似乎”都 不是那麼成熟的。這還真不好說,我隐隐約約感 覺似乎在觀念上需要改變,就像我們要了解廣義 相對論,需要去将萬有引力的觀念轉變成時空扭 曲的觀念來了解一樣。不管如何,大概我們先理 理現在的觀念還是比較必要的。

我們都知道在J2EE,最基礎的web應用的概念 就是Servlet。在OSGI範疇内,Servlet又是如何的 呢?對于OSGI來說,當然願意将這成熟的Servlet 的概念繼續用上,隻是希望在servlet在子產品化、 動态化方面演進一下。

在J2EE裡,由Selvet container來管理servlet的 生命周期,Servlet container根據部署描述文檔 (web.xml)來部署servlet,當收到http請求,就 會根據請求的url查找到相應的servlet來處理請 求,并将servlet的傳回的response響應請求。相 應的,在OSGI裡,有個HttpService可以提供注冊 servlet的方法(registerServlet)

HttpService的bundle有點類似Servlet container,它負責servlet的生命周期管理。

如果每個Servlet都需要寫調用HttpService的 registerServlet方法來注冊的話,有點羅嗦。于是 就有whiteboard pattern在這方面的應用了。 whiteboard pattern是OSGI裡經常使用的一種設 計模式,正如它的名字一樣,這個模式就象你在 白闆(whiteboard)上寫下一條資訊,然後另一 個需要那個資訊的人就可以從白闆上獲得它,并 使用它。在這個過程中,誰寫資訊,誰用資訊, 都不重要,而且什麼時候用資訊也不重要。

在OSGI環境下,要将服務的釋出和撤離看成是動 态的,就象白闆上的資訊一樣。如果用 whiteboard pattern,就可以将釋出者和使用者之 間的關聯由OSGI service registry充當代理的角色 而獲得解藕。