Lotus Expeditor v6.1的世界(三) 還是Hello World吧
Posted on 2008-01-14 16:16 EricFan 閱讀(643) 評(píng)論(0) 編輯 收藏 所屬分類: Lotus Expeditor也許每本編程書籍都已Hello World為開頭不是沒有原因的,因?yàn)?/span>Hello World以淺顯的編程技巧可以迅速地讓開發(fā)者上手,所以,我決定還是落入俗套吧,這次我們來(lái)講如何實(shí)現(xiàn)一個(gè)Hello World。
由于我是利用Java做web方面的東西,所以我們先學(xué)習(xí)一下如何開發(fā)一個(gè)web application。
先從理論上武裝一下自己,理解普通的web application和Lotus Expeditor 的 web application有什么區(qū)別。定位于Lotus Expeditor平臺(tái)的Web Application稱為Client Services web application。因?yàn)?/span>Lotus Expeditor平臺(tái)的組件被稱為bundles,所以一個(gè)定位于此平臺(tái)的Web Application也被稱為一個(gè)Web Application Bundle或者WAB。Client Services web application 和運(yùn)行在 WAS(Websphere Application Server) 或者 tomcat 下的 web application一個(gè)主要的不同就是Client Services web application必須也是一個(gè)有效的OSGI Bundle。那么什么是OSGI呢?這個(gè)就說來(lái)話長(zhǎng)了,等我們羽翼豐滿了以后,在具體討論這個(gè)問題吧,我們還是先實(shí)現(xiàn)一個(gè)定位于Lotus Expeditor平臺(tái)的Web Application。
首先需要?jiǎng)?chuàng)建一個(gè)Web application,打開eclipse,File-New-Project, 選擇Client Services Web 項(xiàng)目,如下圖:
我們把這個(gè)工程叫做 HelloWorld 吧,如下圖:
然后一路Next,直到如下頁(yè)面:
我們看看一個(gè)普通的Lotus Expeditor的web application都用到了哪些包,有Apache MyFaces(org.apache.myfaces) ,Eclipse核心組件(com.ibm.jxesupport.initializer,org.eclipse.core.contenttype,org.eclipse.core.jobs,org.eclipse.core.runtime,org.eclipse.equinox.common,org.eclipse.equinox.event,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.osgi,org.eclipse.osgi.services,org.eclipse.osgi.util),IBM JavaServer Faces(JSF)擴(kuò)展(com.ibm.rcp.servlet.jsf.ext,com.ibm.rcp.servlet.jsf.ext.impl),JavaServer Pages(JSP) API(com.ibm.pvc.servlet.jsp),JavaServer 面窗口小部件庫(kù)(JWL)(com.ibm.rcp.servlet.jwl),JSP標(biāo)準(zhǔn)標(biāo)記庫(kù)(JSTL)(com.ibm.pvc.servlet.jsp.jstl),Servlet API(com.ibm.pvc.servlet),Web Application服務(wù)(org.osgi.service.webapplication),Web Application兼容性(com.ibm.osg.servlet,com.ibm.osg.webapp),Web Container(com.ibm.pvc.webcontainer) ,Web容器-JSP編譯器網(wǎng)橋,可靠性,可用性和可維護(hù)性(RAS)(com.ibm.pvc.ras),這些組件都是干什么用的呢?說實(shí)話,我也一頭霧水,先暫時(shí)不管,我們點(diǎn)擊Finish完成工程的創(chuàng)建。
讓我們看看新建的工程和普通的Web Application的目錄結(jié)構(gòu)有什么不同,如下圖:
Lotus Expeditor的Web Application相比普通的Web Application在整體結(jié)構(gòu)上基本是沒有什么區(qū)別的,主要是多出了plugin.xml和META-INF/MANIFEST.MF兩個(gè)文件。我按照我目前的理解先說說這兩個(gè)文件,說之前就不得不提到OSGI了,其實(shí)我很早就聽說了OSGI,也對(duì)它的架構(gòu)和設(shè)計(jì)思想有一些了解,只不過從來(lái)沒有自己動(dòng)手實(shí)踐過,所以也是一知半解,只知道個(gè)概念而已。好,我們下面就說說OSGI
OSGI Bundle概述
Bundles是含有包含特定頭信息的manifest的jar文件,這些頭信息描述了bundle并且列出了bundle的依賴性,比如說bundle需要的包和服務(wù)。Manifest文件中的描述信息將bundle和其他的jar文件區(qū)分開。非bundle的jar文件的manifest文件常常包含了好少的信息。但是,bundle的manifest文件通常包含了描述信息,比如說bundle的名字,版本以及此bundle需要的包和服務(wù)的列表。
框架管理bundle的生命周期,bundle的生命周期分為:
INSTALLED-bundle已經(jīng)安裝,但是該bundle的依賴性還沒有被完全解決。
RESOLVED-bundle的狀態(tài)是installed,并且已經(jīng)解決了依賴性問題,但是該bundle并沒有被運(yùn)行。如果一個(gè)bundle已經(jīng)啟動(dòng),并且所有的依賴性問題已經(jīng)解決,那么該bundle就會(huì)跳過RESOLVED狀態(tài)。
STARTING-bundle正式運(yùn)行的一個(gè)臨時(shí)狀態(tài)
ACTIVE-bundle正在運(yùn)行
STOPPING-bundle的另一個(gè)臨時(shí)狀態(tài)
UNINSTALLED-bundle不再存在于框架中
每個(gè)bundle都必須包含一個(gè)manifest文件。Bundle的manifest文件包含框架需要正確安裝的數(shù)據(jù)和激活的bundle。Legacy Eclipse bundles 能夠在plugin.xml文件中提供一些manifest的信息,但是我們建議使用META-INF/MANIFEST.MF文件來(lái)記錄manifeset信息。
注意:plugin.xml可以包含類似的信息,但是,plugin.xml也包含了擴(kuò)展和擴(kuò)展點(diǎn)。
如果一個(gè)bundle僅僅包含了一個(gè)plugin.xml,Eclipse平臺(tái)在啟動(dòng)時(shí)將生成一個(gè)等價(jià)的manifest.mf。當(dāng)你在manifest文件中指定數(shù)據(jù)的時(shí)候,你必須使用OSGI標(biāo)準(zhǔn)中定義的文件頭。你可以使用用戶定義的文件頭,但是,框架將會(huì)忽略任何它不能夠理解的文件頭。
MANIFEST.MF文件位于bundle工程的META-INF目錄下。Plugin.xml文件位于根目錄下。
上面說了這么多,總體意思就是說MANIFEST.MF是區(qū)分普通Web Application和OSGI Bundle的標(biāo)志,而一個(gè)Client Services web application就需要含有一個(gè)plugin.xml。下面列出了Client Services web application和標(biāo)準(zhǔn)的web application的不同之處:
1,The Lotus Expeditor platform 不支持通過EAR部署Enterprise Application。Web Application是被直接部署到運(yùn)行時(shí)的(后面這句話不太理解。。。)
2,Client Services web application有一個(gè)manifest文件, 位于META-INF/MANIFEST.MF, 它包含了引用包的信息以及bundel依賴性的信息。
3,Client Services web application 有一個(gè)包含了擴(kuò)展點(diǎn)的 plugin.xml文件,利用這個(gè)文件可以簡(jiǎn)單地啟動(dòng)Web application。
4,Client Services web application 含有記錄了額外部署信息的wab.properties文件。 這個(gè)文件位于 Webcontent /WEB-INF文件夾。
5,JSP文件在作為WAB部署到運(yùn)行時(shí)前被編譯成相對(duì)應(yīng)的Servlet。
我們只是從理論的高度看了一下Client Services Web Application,是不是有點(diǎn)恐高?沒關(guān)系,讓我們具體實(shí)踐一下。在WebContent文件夾下創(chuàng)建index.jsp,如下圖:
JSP源代碼如下:













JSP文件已經(jīng)創(chuàng)建好,先在服務(wù)器上運(yùn)行看看效果如何?右鍵點(diǎn)擊HelloWorld工程,Run As-Run on Server,選擇剛才Client Services v6.1,直接finish就可以了。
在彈出的Lotus Expeditor Client的編輯窗口中點(diǎn)擊打開菜單,我們看到菜單項(xiàng)并沒有發(fā)生什么變化,如下圖:
回到Eclipse,我們發(fā)現(xiàn)Eclipse打開了我們剛才創(chuàng)建的index.jsp,如下圖:
說明index.jsp創(chuàng)建成功了,我們還需要將這個(gè)HelloWorld添加到Lotus Expeditor的菜單項(xiàng)中。那么我們到底應(yīng)該怎么做呢?前面說過了,Client Services web application區(qū)別于其他Web Application就是plugin.xml文件。打開這個(gè)文件看看吧,如下圖:
這段代碼的含義就是將我們的HelloWorld注冊(cè)到Client Service中,這樣我們可以就可以在Client Server啟動(dòng)時(shí)訪問到HelloWorld工程了。那么具體怎么在Lotus Expeditor Client的菜單項(xiàng)中添加我們的工程呢?
擴(kuò)充如下代碼,最終plugin.xml文件如下:













我們?cè)僦匦逻\(yùn)行Hello World工程,看一看Lotus Expeditor Client的菜單項(xiàng),是不是多出來(lái)了“你好”菜單?如下圖:
注意:<contextRoot>/HelloWorld</contextRoot>與url="/HelloWorld"/一定要對(duì)應(yīng)。
我們的簡(jiǎn)單東西到這里就全部介紹完了,下次來(lái)點(diǎn)高級(jí)的東西,我也是邊學(xué)邊寫,哈哈。