關(guān)于本文
本文介紹如何將一個(gè)OSGi Application部署到Tomcat-OSGi中,你會(huì)發(fā)現(xiàn)這是一件非常簡(jiǎn)單的事情。
在本文的最后部分有相關(guān)資源的下載鏈接和文檔鏈接
一、準(zhǔn)備工作
準(zhǔn)備工作分為兩個(gè)部分:準(zhǔn)備一個(gè)OSGi Application 和 準(zhǔn)備Tomcat-OSGi運(yùn)行環(huán)境
1. 準(zhǔn)備一個(gè)OSGi Application
Tomcat-OSGi已經(jīng)準(zhǔn)備了一個(gè)應(yīng)用程序:jpetstore-osgi-demo,它是將spring sample - jpetstore加以修改而成的OSGi應(yīng)用程序。
jpetstore-osgi-demo的最新版本是基于spring-framework-2.5.6和spring-osgi-1.2.0的,點(diǎn)擊這里下載Projects
2. 準(zhǔn)備Tomcat-OSGi運(yùn)行環(huán)境
1.> 下載Tomcat的最新版本 apache-tomcat-6.0.18
2.> Tomcat-OSGi:Tomcat-OSGi-all-in-one.rar
解壓縮Tomcat-OSGi-all-in-one.rar
將2個(gè)jar包拷貝至Tomcat-home/lib 目錄下
將2個(gè)xml文件拷貝至tomcat-home/conf目錄下
將war包拷貝至Tomcat-home/webapps 目錄下
server.xml只是在host節(jié)點(diǎn)添加2個(gè)屬性,如下:



tomcat-users.xml 定義了控制臺(tái)權(quán)限,如下










二、將OSGi 應(yīng)用程序?qū)С鰹閎undle
將下載的projects.rar解壓縮,并在eclipse中作為plug-in導(dǎo)入它們,org.extwind.osgi.demo.jpetstoreosgi.launcher需要作為一個(gè)普通project導(dǎo)入,這些projects包含了源代碼,方便你進(jìn)行調(diào)試。
Tomcat-OSGi已經(jīng)準(zhǔn)備好了這些bundle,點(diǎn)擊這里下載bundles
通過(guò)eclipse的導(dǎo)出功能,將他們導(dǎo)出為bundle jar包,需要注意的是,org.apache.jasper, jetty,javax.servlet.*和org.eclipse.osgi是不需要導(dǎo)出的。(在org.extwind.osgi.demo.jpetstoreosgi.launcher中有一個(gè)導(dǎo)出腳本Exporter.xml,可以運(yùn)行它進(jìn)行導(dǎo)出)
三、在Tomcat-OSGi中部署bundle
在tomcat-home/webapps中新建一個(gè)目錄JPetStoreOSGi,在JPetStoreOSGi目錄中新建一個(gè)空文件osgi.ini,并將導(dǎo)出的bundles拷貝到該目錄下。
執(zhí)行spring-framework-2.5.6/samples/jpetstore/db/hsqldb/server.bat 啟動(dòng)數(shù)據(jù)庫(kù)
現(xiàn)在,準(zhǔn)備工作已經(jīng)完成了,在瀏覽器中輸入 http://localhost:8080/console 進(jìn)入OSGi控制臺(tái),你會(huì)發(fā)現(xiàn)所有bundle都已經(jīng)安裝好了,將所有的bundle都啟動(dòng)了,(建議先啟動(dòng)org.springframework.osgi.web.extender)。
現(xiàn)在是時(shí)候來(lái)看看JPetStoreOSGi部署到Tomcat-OSGi中后的效果了,在瀏覽器中訪(fǎng)問(wèn)下面這個(gè)地址
http://localhost:8080/JPetStoreOSGi/shop/index.do
目前osgi.ini中支持properties屬性 osgi.console,啟動(dòng)osgi控制臺(tái)。
在Tomcat-OSGi alpha2版本中,支持Equinox-JspServlet的注冊(cè),并兼容其URI pattern,也就是說(shuō),在eclipse的開(kāi)發(fā)環(huán)境中開(kāi)發(fā)出來(lái)的應(yīng)用程序可以直接部署到Tomcat-OSGi中,而無(wú)需任何代碼級(jí)別的修改。
有一點(diǎn)點(diǎn)區(qū)別就是,在Tomcat-OSGi中已經(jīng)export了javax.servlet(2.4),javax.servlet.jsp(2.1)和org.apache.jasper,因此在Tomcat-OSGi中這些bundle是不需要加入的。
勿在app中使用org.apache.jasper,會(huì)導(dǎo)致其他應(yīng)用程序的jsp出現(xiàn)錯(cuò)誤。
相關(guān)資源
Extwind的Google Group: http://groups.google.com/group/extwind
Extwind的Google Project: http://code.google.com/p/extwind
Tomcat-OSGi-alpha-2 all-in-one 下載地址
http://extwind.googlecode.com/svn/trunk/dist/Tomcat-OSGi/Tomcat-OSGi-all-in-one.rar
Extwind SVN: http://extwind.googlecode.com/svn/trunk/
jpetstore-osgi-demo的bundles下載地址
http://extwind.googlecode.com/svn/trunk/demo/jpetstore-osgi-demo/Bundles.rar
jpetstore-osgi-demo的projects下載地址
http://extwind.googlecode.com/svn/trunk/demo/jpetstore-osgi-demo/Projects.rar
構(gòu)建jpetstore-osgi-demo的演示過(guò)程:
Developing Equinox/Spring-osgi/Spring Framework Web Application Part 1 - 顯示首頁(yè)
Developing Equinox/Spring-osgi/Spring Framework Web Application Part 2 - 使用Spring-OSGI
Developing Equinox/Spring-osgi/Spring Framework Web Application Part 3 - 找到我的Bean
構(gòu)建新版jpetstore-osgi-demo的相關(guān)問(wèn)題:
Tomcat-OSGi Demo: JPetStoreOSGi(Spring-osgi 1.2.0)