初探OSGi Web應(yīng)用開發(fā)利器Equinox:環(huán)境設(shè)置
原創(chuàng)【51CTO精選譯文】在之前的《你好,OSGi》系列中,我們理解 OSGi服務(wù)平臺(tái)的工作原理奠定了基礎(chǔ)。在接下來(lái)的***這幾篇中,我們將學(xué)習(xí)如何將 OSGi 可插入、基于組件的開發(fā)模型應(yīng)用到 Web 應(yīng)用程序。您將創(chuàng)建一個(gè)基于套件(bundle)的OSGi應(yīng)用程序,用它可以為靜態(tài)資源、servlet 或 JSP 提供服務(wù)器端服務(wù)。此外,你還可以學(xué)到一些實(shí)際的經(jīng)驗(yàn):在 Web 應(yīng)用程序中,使用 Equinox框架簡(jiǎn)便地利用 OSGi的模塊化、版本管理和動(dòng)態(tài)服務(wù)。
51CTO編輯推薦:OSGi入門與實(shí)踐全攻略
該系列已經(jīng)介紹了 OSGi 開發(fā)概念并演示如何使用 Equinox 創(chuàng)建簡(jiǎn)單的 Hello World 應(yīng)用,Eclipse 的 OSGi 容器和實(shí)現(xiàn)。另外還已經(jīng)介紹了 Spring DM(Spring動(dòng)態(tài)模型),用它可以非常方便地創(chuàng)建 Spring 應(yīng)用程序,并將其部署在 OSGi 容器中。
在***一節(jié),我們將解答許多開發(fā)人員現(xiàn)在要問的問題:我喜歡 OSGi 這個(gè)概念,但如何用它來(lái)創(chuàng)建 Web 應(yīng)用程序呢?
在本節(jié)中,你將看到,OSGi 的開發(fā)模式極大地簡(jiǎn)化了編寫真正可插入、模塊化和組件化的服務(wù)端應(yīng)用程序的流程。開發(fā)練習(xí)將基于 OSGi 引用實(shí)施 Equinox 之上(在這個(gè)系列文章都是如此)。不過(guò),這次我們將在服務(wù)器端使用 Equinox(參考閱讀:Equinox入門)。開始時(shí),我們將討論部署 OSGi Web 應(yīng)用程序的選項(xiàng)序(本例中為 Jetty 或 Tomcat ),之后是一個(gè)簡(jiǎn)短的指南,配置 Web 應(yīng)用程序開發(fā)環(huán)境。然后,我們將開發(fā)一個(gè)簡(jiǎn)單的 Hello World OSGi Web 應(yīng)用程序并使用不同的方式對(duì)其進(jìn)行部署。
使用服務(wù)器端Equinox 進(jìn)行應(yīng)用程序開發(fā)
使用服務(wù)器端Equinox 開發(fā) OSGi Web 應(yīng)用程序有兩種方法:你可以將輕量級(jí)的 servlet 容器(如 Jetty)嵌入到 OSGi 容器中,或者將 OSGi 容器嵌入到 Web 應(yīng)用程序中,然后在 servlet 容器(如 Apache Tomcat)中部署該程序。
現(xiàn)在,好消息是:無(wú)論選擇何種方式,開發(fā) OSGi Web 應(yīng)用程序的流程是相同的。因此,***是在開發(fā)過(guò)程中將 servlet 容器嵌入到你的 OSGi 容器;一旦應(yīng)用程序就緒,你就可以對(duì)其重啟打包(re-package)并進(jìn)行部署。馬上你就可以學(xué)習(xí)如何將 servlet 容器嵌入到你的 OSGi 容器。但***步,我們需要設(shè)置開發(fā)環(huán)境。
有關(guān)Equinox:Equinox 崛起
服務(wù)器端Equinox項(xiàng)目正在快速發(fā)展。存在這樣一個(gè)趨勢(shì):增加對(duì)流行的 MVC 框架(如 Apache Struts)和 Spring Web 框架的支持,還有對(duì)于普及的對(duì)象-關(guān)系映射工具(如 Hibernate)的支持。富 Ajax 平臺(tái)是另一個(gè) Eclipse 項(xiàng)目,它允許你使用具有服務(wù)器端 Equinox 的 Ajax 應(yīng)用程序。
設(shè)置開發(fā)環(huán)境
在本節(jié)的應(yīng)用程序開發(fā)練習(xí)中,我們會(huì)將一個(gè)輕量級(jí) servlet 容器嵌入到 OSGi 套件(或插件,即 Eclipse 語(yǔ)境下的 plug-in)。一旦這個(gè)插件安裝到 OSGi 容器,它將監(jiān)聽 HTTP 請(qǐng)求。接收到一個(gè)請(qǐng)求時(shí),它將查看任何已安裝的插件是否能夠?qū)φ?qǐng)求進(jìn)行處理,如果是,那么它會(huì)將控制轉(zhuǎn)發(fā)給相應(yīng)的插件來(lái)生成一個(gè)響應(yīng)。一旦生成響 應(yīng),OSGi 容器會(huì)將其轉(zhuǎn)發(fā)至客戶。
服務(wù)器端 Equinox 通過(guò)提供幾個(gè)預(yù)制的插件(將 servlet 容器嵌入到 OSGi 插件)來(lái)簡(jiǎn)化基于 OSGi 的 Web 應(yīng)用程序開發(fā)。以下插件都包含了一個(gè)嵌入的 servlet 容器:
org.eclipse.equinox.http:運(yùn)行占用空間(footprint)非常小的插件,適合于資源有限的環(huán)境。
org.eclipse.equinox.http.jetty:使用 Jetty 作為底層引擎來(lái)提供對(duì) Servlet API 2.4 的支持。
在本小節(jié)中,我們通過(guò)將 Jetty 插件嵌入到 Eclipse IDE 來(lái)配置 OSGi Web 應(yīng)用程序開發(fā)環(huán)境。(如果您的 IDE 尚未啟動(dòng),應(yīng)先啟動(dòng)它)。
1. 將 jettyhttp-anon.psf 下載到你的計(jì)算機(jī)。
2. 右擊 Package Explorer 然后選擇 Import > Team > Team Project Set,然后單擊下一步(Next)。
3. 在 Import a Team Project Set(導(dǎo)入團(tuán)隊(duì)項(xiàng)目設(shè)置)對(duì)話框中,單擊 Browse 并選擇你下載到本地的 jettyhttp-anon.psf 文件,如圖 1 所示。
圖 1. 導(dǎo)入插件
單擊 Finish 啟動(dòng)導(dǎo)入流程。這個(gè)步驟可能需要幾分鐘,要看你的互聯(lián)網(wǎng)連接速度,因?yàn)?Eclipse 將從 dev.eclipse.org CVS 庫(kù)下載必需的項(xiàng)目文件。
4. 一旦導(dǎo)入完成,你應(yīng)該可以看到一些套件已導(dǎo)入到你的工作空間中:
- javax.servlet v2_4
- org.apache.commons.logging v1_0_4
- org.eclipse.equinox.http.jetty
- org.eclipse.equinox.http.registry
- org.eclipse.equinox.http.servlet
- org.mortbay.jetty v5_1_11
你的開發(fā)環(huán)境已準(zhǔn)備就緒。下一步是在 Equinox OSGi 框架中執(zhí)行你的套件。如果忘記如何操作,請(qǐng)查閱本系列的***節(jié)。
驗(yàn)證你的設(shè)置
如果你已經(jīng)在 Equinox OSGi 框架中執(zhí)行套件,你將會(huì)在控制臺(tái)視圖中看到 OSGi> 提示符。你應(yīng)能夠在 OSGi 控制臺(tái)中看到 Jetty servlet 容器生成的信息,這些信息類似下面的列表 1。
列表 1. OSGi 控制臺(tái)中的 Jetty 信息
- osgi> May 21, 2008 12:28:06 PM org.mortbay.http.HttpServer doStart
- INFO: Version Jetty/5.1.x
- May 21, 2008 12:28:07 PM org.mortbay.util.Container start
- INFO: Started org.mortbay.jetty.servlet.ServletHandler@f47bf5
- May 21, 2008 12:28:07 PM org.mortbay.util.Container start
- INFO: Started HttpContext[/,/]
- May 21, 2008 12:28:07 PM org.mortbay.http.SocketListener start
- INFO: Started SocketListener on 0.0.0.0:80
- May 21, 2008 12:28:07 PM org.mortbay.util.Container start
- INFO: Started org.mortbay.http.HttpServer@1f6df4c
一直得到你看到 INFO: Started org.mortbay.http.HttpServer@1f6df4c 之后,再進(jìn)行下一步操作。
在瀏覽器中輸入 http://localhost/
來(lái)驗(yàn)證你可以分為 Jetty服務(wù)器。你應(yīng)能夠看到錯(cuò)誤頁(yè)面,其信息如列表 2 所示。
列表 2. Jetty 錯(cuò)誤信息
- HTTP ERROR: 404
- ProxyServlet: /
- RequestURI=/
- Powered by Jetty://
由于 Jetty 無(wú)法找到請(qǐng)求的資源,所有你會(huì)接收到 404 錯(cuò)誤信息。如果無(wú)法找到已寄存的插件來(lái)處理當(dāng)前請(qǐng)求,Jetty OSGi 插件在服務(wù)器端不提供任何默認(rèn)的 index 頁(yè)面;作為替代,它將拋出這個(gè) 404 錯(cuò)誤頁(yè)面。
如果你的設(shè)置能夠與我的講述匹配,那么在下一篇文章中你就可以開始***個(gè)練習(xí):使用服務(wù)器端Equinox 開發(fā)基于 OSGi Web 應(yīng)用程序。敬請(qǐng)關(guān)注!
【編輯推薦】