關(guān)于作者
The author of this article is co-author of the book "Struts Best Practices" published in German (2004) and French (Feb 2005). He has been working with Java n-tier web since 1998, including SilverStream appserver, before the advent of OS and J2EE. His company, Infonoia SA is editor of multi-platform, multi-repository software and solutions around document retrieval and publishing. Infonoia also provides consulting services, mentoring and training (English, French, German) on Best Practices in the web technologies and frameworks they use, such as Struts, Eclipse and RSP. Wolfgang is also available for speaking engagements on RSP. Wolfgang can be reached at wgehner at infonoia dot com.
一、關(guān)于這篇文章
這篇文章將會(huì)分成兩個(gè)部分通過(guò)分析一個(gè)實(shí)例去分析如果使用OSGI構(gòu)建一個(gè)WEB應(yīng)用。
第一個(gè)部分只是簡(jiǎn)單的介紹了如何在應(yīng)用中創(chuàng)建擴(kuò)展點(diǎn)(extension points),第二部分將通過(guò)映射你自己的Servlet和依賴關(guān)系使其能夠作為一個(gè)新的Web應(yīng)用運(yùn)行
二、準(zhǔn)備工作
1. jdk, 最好將1.5和1.6都準(zhǔn)備好,因?yàn)橄乱黄恼聦?huì)用到j(luò)dk1.6
2. Eclipse 3.3
3.下載本文中需要用到的示例應(yīng)用包,[下載地址]
三、運(yùn)行這個(gè)應(yīng)用
1. 將Rspdemo-0.2.zip解壓到C盤,形成目錄 C:\rsp
2. 雙擊 C:\rsp\t.bat ,啟動(dòng) Tomcat ,你也可以去 C:\rsp\apache-tomcat-5.5.15\bin里面啟動(dòng),效果都一樣,它里面的Tomcat幾乎是原裝的
3.打開瀏覽器,訪問(wèn) http://localhost/rspwebapp ,你應(yīng)該會(huì)看到這個(gè)效果

OK,去 http://localhost/rspwebapp/struts.jsp 這個(gè)頁(yè)面看看,這個(gè)頁(yè)面是由Struts模塊生成的

這個(gè)頁(yè)面的功能自己嘗試一下就知道了
四、嘗試修改應(yīng)用代碼
1.將Eclipse3.3解壓縮(覆蓋)到 C:\rsp\eclipse (由于原文件夾內(nèi)包含Workspace和Project相關(guān)信息,所以不建議刪除原eclipse文件夾),接著運(yùn)行Eclipse,Workspace默認(rèn)就行了,在[Package Explorer]面板里就會(huì)有3個(gè)Working Set,里面都是Plug-in Project,也就是傳說(shuō)中的Bundle了。
注:你可能會(huì)發(fā)現(xiàn)所有的[MANIFEST.MF]幾乎都有錯(cuò)誤提示,原因可能是這個(gè)Web應(yīng)用是在Linux/Unix操作系統(tǒng)寫的導(dǎo)致Eclipse的Editer無(wú)法識(shí)別該格式(JAVA文件也是如此),所以只需要用Text Editor打開一次該文件,讓Eclipse自動(dòng)改變文件格式就行了。
2. 展開所有Project,打開org.rsp.sample.usage.servlet.MyServlet,修改一下doGet()方法,加入一些能在頁(yè)面上顯示的東西

3. 用 Plug-in Manifest Editor 打開 MANIFEST.MF, 使用Overview面板中的Export Wizard,將這個(gè)插件輸出到獨(dú)立Jar包(默認(rèn)設(shè)置)

4. 訪問(wèn) http://localhost/rspwebapp/platform/sp_redeploy 頁(yè)面重新部署插件,然后再訪問(wèn) http://localhost/rspwebapp,頁(yè)面中多了
--------- Hello, Phrancol ! ---------
這3個(gè)Working set包含的內(nèi)容:
Equinox - 簡(jiǎn)單的說(shuō),就是OSGI的運(yùn)行環(huán)境。
Rsp samples - Web application的內(nèi)容,包括配置文件,資源文件等。
Simplejars - Rsp samples里面所需要的Jar包,每個(gè)jar包都被作為一個(gè)獨(dú)立的Plug-in.
五、Web application的目錄結(jié)構(gòu)
org.rsp.sample.webapp實(shí)際上就是一個(gè)web應(yīng)用,可以在C:\rsp\apache-tomcat-5.5.15\conf\Catalina\localhost里面找到Context的配置文件。
在WebContent/WEB-INF/web.xml里面配置Equinox的servletbridge啟動(dòng)OSGI運(yùn)行環(huán)境。
進(jìn)入C:\rsp\workspace\org.rsp.sample.webapp\WebContent\WEB-INF\platform目錄,發(fā)現(xiàn)里面的目錄結(jié)構(gòu)幾乎與Eclipse的目錄結(jié)構(gòu)一樣,
這幾個(gè)目錄的用處:
configuration - 里面默認(rèn)的 config.ini 列出所有可用的bundle,和他們的啟動(dòng)級(jí)別,Equinox將自動(dòng)讀取這個(gè)配置文件啟動(dòng)bundles
plugins - bundle都放在這里面
links - 與Eclipse里面的links目錄作用一樣,讀取外部bundle
Eclipse的網(wǎng)站上有Equinox更詳細(xì)的介紹和簡(jiǎn)單的示例 [點(diǎn)擊這里]
注意:這個(gè)示例中使用的Equinox應(yīng)該是較老的版本,最新的版本對(duì)目錄結(jié)構(gòu)和bridge實(shí)現(xiàn)都有更好的改進(jìn),可以在Eclipse的CVS上獲取最新的Equinox代碼
六、訪問(wèn)其他bundle
打開org.rsp.sample.webapp/WebContent/struts.jsp,能看到<c:import url="/platform/do/myAct" />,也就是http://localhost/rspwebapp/platform/do/myAct ,這個(gè)頁(yè)面是由 org.rsp.framework.struts 提供的,打開它里面的 plugin.xml,可以發(fā)現(xiàn)
這樣一段配置
<extension id="myservletID" name="myservletName" point="org.eclipse.equinox.servlet.ext.servlets">
<alias>/do</alias>
<servlet-class>org.rsp.framework.struts.base.BundleActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>*/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>chainConfig</param-name>
<param-value>*/WEB-INF/chain-config.xml</param-value>
</init-param>
<httpcontext-name>cross-context</httpcontext-name>
</extension>
里面就是關(guān)于 Extension 和 Extension points 的相關(guān)配置,在Equinox上有更詳細(xì)的介紹,于是大概能理解這個(gè)頁(yè)面是如何來(lái)的了,也大概能理解如何使用其他bundle的資源。
結(jié)束語(yǔ)
偶爾從Google上搜索到了這篇文章,感覺(jué)對(duì)像我這樣的OSGI初學(xué)者很有用,于是將其意思整理了一下,帖在BLOG上,希望能對(duì)路過(guò)的OSGI愛(ài)好者有所幫助。
如果想更好的理解作者的意圖,建議看原文。
歡迎大家通過(guò)郵箱osgi.phrancol@gmail.com與我討論有關(guān)OSGI的話題。
Developing Eclipse/OSGi Web Applications Part 1
Developing Eclipse/OSGi Web Applications Part 2
Equinox in a Servlet Container
posted on 2007-08-29 22:40
Phrancol Yang 閱讀(3681)
評(píng)論(1) 編輯 收藏 所屬分類:
OSGI