<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 19, 文章 - 1, 評(píng)論 - 21, 引用 - 0
    數(shù)據(jù)加載中……

    打造一個(gè)基于OSGi的Web Application——為OSGi容器提供Web Application環(huán)境

    本章敘述如何在OSGi容器中提供必要的Web Application環(huán)境,其中包括Servlet 2.4、Jsp 2.0和Commons-Logging相關(guān)的package,使得其他在OSGi容器中的bundle可以import。

    為了在OSGi容器中提供export的package,一般有三種方式:
    1. 一個(gè)常規(guī)的bundle,自身包含必要的class,同時(shí)在Export-Package中聲明。
    2. 一個(gè)Host為System Bundle的Fragment Bundle,同樣也可以在Export-Package中聲明導(dǎo)出的package,只要這個(gè)package中的class在System Bundle的ClassLoader中能load到。
    3. 通過(guò)啟動(dòng)Framework的配置項(xiàng):org.osgi.framework.system.packages和org.osgi.framework.system.packages.extra。OSGi 4.2規(guī)范中描述了這兩個(gè)標(biāo)準(zhǔn)的配置項(xiàng)。在這兩個(gè)配置項(xiàng)中描述的package都等同于在System Bundle中聲明了export。

    對(duì)于在Web Application中運(yùn)行的OSGi容器,一些必要的環(huán)境是通過(guò)Web Container提供的,我們最好不要,也不應(yīng)該用自己的類(lèi)來(lái)替換,這包括了j2ee相關(guān)的jar,如servlet和jsp相關(guān)的jar等等。在一些WebServer的實(shí)現(xiàn)中,會(huì)自動(dòng)屏蔽Web Application的classpath中的j2ee相關(guān)的jar。

    除了j2ee相關(guān)的jar之外,還有一些使用非常普遍的jar,比如說(shuō)Apache commons一類(lèi),其中最常用的大概就是commons-lang.jar、commons-io.jar和commons-logging.jar了,這些jar最好也有Web Container來(lái)提供,或者有必要的話,在Web Application中提供,而不是在OSGi容器中提供,這涉及到一些JVM層次的單例類(lèi),或者希望能由Web Application級(jí)別來(lái)統(tǒng)一實(shí)現(xiàn)和配置的環(huán)境,最常見(jiàn)的應(yīng)用就是日志配置了。通過(guò)由Web Application提供的commons-logging來(lái)給OSGi容器中的環(huán)境使用,而commons-logging通過(guò)何種方式來(lái)實(shí)現(xiàn),不需要讓OSGi內(nèi)部知道。

    至于導(dǎo)出package到OSGi的方式中,是采用第二種還是第三種,主要區(qū)別在于:第三種方式是加載framework時(shí)指定的,在其后的生命周期中不可更改,而第二種方式則更符合OSGi動(dòng)態(tài)加載的特性。

    我采用第二種方式來(lái)給OSGi容器增加環(huán)境支持,具體操作很簡(jiǎn)單,以Servlet為例,首先編寫(xiě)一個(gè)文本文件,名字為:MANIFEST.MF,內(nèi)容如下:
     1 Manifest-Version: 1.0
     2 Bundle-ManifestVersion: 2
     3 Bundle-Name: Servlet Extension Fragment
     4 Bundle-SymbolicName: javax.servlet_extension;singleton:=true
     5 Bundle-Version: 2.4.0
     6 Fragment-Host: system.bundle; extension:=framework
     7 Bundle-RequiredExecutionEnvironment: J2SE-1.5
     8 Export-Package: javax.servlet;version="2.4.0",
     9  javax.servlet.http;version="2.4.0",
    10  javax.servlet.resources;version="2.4.0"
    11 Bundle-Vendor: dbstar
    注意其中關(guān)鍵的header屬性,F(xiàn)ragment-Host: system.bundle; extension:=framework
    這樣寫(xiě)才能保證這個(gè)Fragment Bundle在各種OSGi Framework實(shí)現(xiàn)中都能兼容。
    保存以后,將這個(gè)文件放置到一個(gè)名字為META-INF的目錄中,然后用jar命令打包成一個(gè)jar即可(或者用winrar打包,記得選擇壓縮方式為zip,在打包后將zip后綴名改成jar,我通常都是這么干的)。

    Jsp的MANIFEST.MF:
     1 Manifest-Version: 1.0
     2 Bundle-ManifestVersion: 2
     3 Bundle-Name: Jsp Extension Fragment
     4 Bundle-SymbolicName: javax.servlet.jsp_extension;singleton:=true
     5 Bundle-Version: 2.0.0
     6 Bundle-Vendor: dbstar
     7 Fragment-Host: system.bundle; extension:=framework
     8 Bundle-RequiredExecutionEnvironment: J2SE-1.5
     9 Export-Package: javax.servlet.jsp;version="2.0.0",
    10  javax.servlet.jsp.el;version="2.0.0",
    11  javax.servlet.jsp.resources;version="2.0.0",
    12  javax.servlet.jsp.tagext;version="2.0.0"

    commons-logging的MANIFEST.MF
     1 Manifest-Version: 1.0
     2 Bundle-ManifestVersion: 2
     3 Bundle-Name: Commons Logging Extension Fragment
     4 Bundle-SymbolicName: org.apache.commons.logging_extension;singleton:=true
     5 Bundle-Version: 1.1.1
     6 Bundle-Vendor: dbstar
     7 Fragment-Host: system.bundle; extension:=framework
     8 Bundle-RequiredExecutionEnvironment: J2SE-1.5
     9 Export-Package: org.apache.commons.logging;version="1.1.1",
    10  org.apache.commons.logging.impl;version="1.1.1"
    因?yàn)槲矣玫氖莄ommons-logging-1.1.1.jar,所以version寫(xiě)的是1.1.1,大家可以修改成自己所使用的jar的版本。


    將上面生成的三個(gè)jar放到OSGi-Web項(xiàng)目的WEB-INF/osgi/plugins目錄下面。還記得我在上一章創(chuàng)建的那個(gè)Tomcat Server么,clean一次,新的jar會(huì)部署到Tomcat中去,然后就可以運(yùn)行Server了。
    至于為什么是clean而不是publish,區(qū)別在于clean會(huì)清除所有OSGi容器創(chuàng)建出來(lái)的文件,這樣下次啟動(dòng)OSGi時(shí)就會(huì)做一個(gè)install bundle的事情,而publish不會(huì)自動(dòng)install新加進(jìn)去的bundle。

    如果你使用的是equinox,那么你可以在控制臺(tái)中看到Syetem Bundle現(xiàn)在多了幾個(gè)Fragments,查看一下Servlet Bundle,會(huì)顯示下列信息,表示servlet 2.4的package在OSGi容器中已經(jīng)可用了:
    osgi> bundle 2
    javax.servlet_extension_2
    .4.0 [2]
      Id
    =2, Status=RESOLVED    Data Root=D:\dbstar\workspaces\OSGi\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\OSGi-Web\WEB-INF\osgi\configuration\org.eclipse.osgi\bundles\2\data
      No registered services.
      No services in use.
      Exported packages
        javax.servlet
    ; version="2.4.0"[exported]
        javax.servlet.http; version="2.4.0"[exported]
        javax.servlet.resources; version="2.4.0"[exported]
      No imported packages
      Host bundles
        org.eclipse.osgi_3
    .6.0.v20100128-1430 [0]
      No named class spaces
      No required bundles

    最后提供幾個(gè)本章提到的bundle給大家下載,大家就不用自己再起生成一個(gè)了。
    javax.servlet_extension_2.4.0.jar
    javax.servlet.jsp_extension_2.0.0.jar
    org.apache.commons.logging_extension_1.1.1.jar
    系統(tǒng)不讓傳擴(kuò)展名為.jar的文件,大家下載后把擴(kuò)展名改改吧,阿門(mén)。

    posted on 2010-03-24 22:49 dbstar 閱讀(4644) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): OSGi

    評(píng)論

    # re: 打造一個(gè)基于OSGi的Web Application——為OSGi容器提供Web Application環(huán)境  回復(fù)  更多評(píng)論   

    拜讀了,呵呵
    2010-05-26 11:37 | hesy

    # re: 打造一個(gè)基于OSGi的Web Application——為OSGi容器提供Web Application環(huán)境  回復(fù)  更多評(píng)論   

    @hesy
    是否可以使用map.put("org.osgi.framework.bundle.parent", "framework");
    這種形式呢? 是不是這種形式與上面的某種是一樣的
    2010-11-22 11:17 | whitewolf
    主站蜘蛛池模板: 一个人免费观看视频www| 免费大黄网站在线观| 亚洲日本一线产区和二线产区对比| 最近最好的中文字幕2019免费 | 性感美女视频在线观看免费精品 | 麻豆狠色伊人亚洲综合网站| 免费jlzzjlzz在线播放视频| 香蕉免费一区二区三区| 亚洲精品国产综合久久久久紧| 亚洲乱码日产精品a级毛片久久| 99re6在线视频精品免费下载| 亚洲av成人片在线观看| 亚洲AV无码码潮喷在线观看| 破了亲妺妺的处免费视频国产| 成人网站免费看黄A站视频| 亚洲精品又粗又大又爽A片| 亚洲精品亚洲人成人网| 午夜dj在线观看免费视频| 特级无码毛片免费视频尤物| 国产成人va亚洲电影| 亚洲欧洲精品一区二区三区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲av不卡一区二区三区| 国产精品视_精品国产免费| 午夜精品射精入后重之免费观看| 日韩亚洲翔田千里在线| 18gay台湾男同亚洲男同| 亚洲综合无码AV一区二区| 日韩一品在线播放视频一品免费| 足恋玩丝袜脚视频免费网站| 一个人看的免费视频www在线高清动漫 | 蜜桃传媒一区二区亚洲AV| 亚洲精品乱码久久久久久下载| 在线亚洲人成电影网站色www| 成人免费视频软件网站| 精品免费人成视频app| 日本高清不卡aⅴ免费网站| 成人福利在线观看免费视频| 亚洲AV成人片无码网站| 在线观看亚洲AV每日更新无码| 亚洲沟沟美女亚洲沟沟|