自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

初探OSGi Web容器:控制Web程序的生命周期

原創(chuàng)
開發(fā) 后端
本文取自SpringSource的小組博客。SpringSource組員Rob Harrop在本文中描述了OSGi服務(wù)平臺上的Web容器,這個容器規(guī)范定義了WAR 文件的實施標(biāo)準,可以實現(xiàn)WAR文件的安裝,控制Web程序的生命周期等功能。

【51CTO快譯】最近幾個月,我在與 OSGi 專家組的人員合作,制定Web 容器的 RFC66 規(guī)范。Web 容器規(guī)范定義了 OSGi 服務(wù)器平臺上 WAR 文件的實施標(biāo)準。

51CTO編輯推薦:OSGi入門與實踐全攻略

這項工作非常有趣,因為 dm 服務(wù)器對 WAR 文件的支持已將近 18 個月;我們非常興奮能夠一起努力來推出一個標(biāo)準。 作為終端用戶,你將不再需要依靠專用的 API 接口或功能就可以在 OSGi 上部署 WAR 文件。SpringSource 負責(zé)編寫 Web 容器的參考實現(xiàn),過去幾周,我一直在忙這件事。

本文講述了 Web 容器規(guī)范最主要的內(nèi)容以及編寫 RI 代碼所需的步驟?,F(xiàn)在還不能提供規(guī)范文檔,但我會概述其中最重要的要點。

目前,還沒有發(fā)布 RI 的二進制文件,但通過從源文件進行創(chuàng)建是非常容易的。

Web 容器的主要功能

Web 容器所支持的最有趣的功能:

◆WAR 文件的安裝

◆Web 應(yīng)用程序組件(Web Application Bundles:縮寫為 WAB)的安裝

◆利用擴張器對 Web 應(yīng)用程序生命周期的控制

◆利用 URL 參數(shù)對配置屬性的控制

安裝 WAR 文件

對我而言,Web 容器最有趣的功能是在 OSGi 上直接部署 WAR 文件而無需修改代碼。(由于 JNDI 面前還未包含在規(guī)范中,因此使用的 JNDI 的 WAR 文件還需要修改代碼。我認為這種限制不會一直存在,解決這個問題的工作正在進行。)

想要在 OSGi 上安裝 WAR 文件,你只需在調(diào)用 BundleContext.installBundle 或使用平臺的控制器時,在文件位置前添加 webbundle:。例如,在 Equinox 中可以這樣做:

install webbundle:file:formtags.war

當(dāng)然,這要求 OSGi 平臺已經(jīng)部署 Web 容器。

Web 容器將對 WAR 執(zhí)行多個轉(zhuǎn)換,以確保獲取了正常運行所需的符號名和版本以及必要的導(dǎo)入。為了添加 WEB-INF/classes 和WEB-INF/lib 中的所有文件,Web 容器還將更新組件路徑。

安裝 Web 應(yīng)用程序組件(WAB)

如果你不想使用 Web 容器對 WAR 進行轉(zhuǎn)換,完全可以跳過這個轉(zhuǎn)換步驟。很簡單,你可以忽略 webbundle 協(xié)議,自己直接添加相應(yīng)的聲明頭文件并安裝該組件。

在 WAR 套件路徑下不能包含任何不屬于 WEB-INF 的條目。這是為了防止用戶的應(yīng)用程序類在 Web 程序中顯示為可見的資源文件。這可能為 WAR 帶來更多限制,不過這個文問題正在解決。

利用擴展器控制生命周期

Web 容器使用控制器模型控制 Web 程序的生命周期。Web 應(yīng)用程序在相應(yīng)的組件啟動時啟動,并當(dāng)該組件停止時停止。

在 Equinox 中,這意味著我可以直接從控制臺啟動或停止我的 Web 程序。例如,指定上述的 formtags.war 組件的組件 ID 為 50:

start 50

… Tomcat output …

stop 50

使用 URL 參數(shù)控制配置

WAR 文件的配置可通過在安裝 URL 后添加某些特定的配置屬性來控制。

例如,為了控制 Web 程序的環(huán)境路徑,你可以添加 Web-ContextPath 選項:

install webbundle:file:formtags.war?Web-ContextPath=ftags

或者,為了控制生成的 Bundle-SymbolicName 頭文件:

install webbundle:file:formtags.war?Bundle-SymbolicName=ftags.bundle

#p#

Web 容器和 dm 服務(wù)器

Web 容器 RI 中代碼大部分來自 dm 服務(wù)器中,或根據(jù)其中的代碼改寫,但是 RI 并不要求完整的 dm 服務(wù)器。我們會將 dm 服務(wù)器中當(dāng)前的網(wǎng)頁代碼替換為 Web 容器 RI,另外,我們還會將 Web 容器作為在 OSGi 上創(chuàng)建 Web 程序的推薦方法。

參考實現(xiàn)介紹

Web 容器 RI 使用 Tomcat 作為 servlet 容器實現(xiàn)。RI 本身由四個組件構(gòu)成。core bundle 包含所有獨立于 servlet 容器的代碼。tomcat 組件包含所有 Tomcat 專用代碼。tomcat.fragment 組件包含缺省的 Tomcat 配置并作為碎片附加到 Tomcat Catalina 組件。extender bundle 包含所有擴展器行為,并且如果你選擇手動管理 Web 程序的生命周期,可以將其刪除。

創(chuàng)建引用實現(xiàn)

為了運行 RI,你需要從源文件中進行創(chuàng)建。源文件可以直接從 SVN 獲?。?/P>

svn co https://anonsvn.springsource.org/svn/dm-server-osgi-web-container/trunk

一旦獲得了這些代碼,你就可以使用以下命令進行創(chuàng)建:

cd build-web-container

ant clean test collect

如果測試失敗,請使用 JIRA 提交故障。創(chuàng)建成功之后,你就可以運行 Web 容器并安裝一些 WAR 文件。

運行參考實現(xiàn)

我使用 PAX Runner 運行 Web 容器 RI。我的 PAX Runner 配置利用創(chuàng)建的二進制文件和 Ivy 管理的相關(guān)性來運行 Web 容器。

在 build-web-container 目錄中,你可以找到一個名為 runner.bundles 的文件。利用這個文件可指示 PAX Runner 安裝 Web 容器需要的所有組件:

pax-run –platform=equinox –snapshot runner.bundles

該命令使用 PAX Runner 啟動 Equinox。–snapshot 標(biāo)記用來指示 PAX Runner 下載 Equinox ***的穩(wěn)定版本——部署了***公布的 OSGi 4.2 規(guī)范。

一旦 Equinox 啟動并發(fā)出 ss 命令驗證組件已經(jīng)安裝,你就可以看到所有已安裝和運行的 45 個組件。

安裝應(yīng)用程序

我使用 dm 服務(wù)器的 FormTags WAR 示例進行測試。

我試圖直接安裝 FormTags 程序,但結(jié)果沒有出現(xiàn)預(yù)期的結(jié)果:

install webbundle:file:formtags.war

Bundle id is 48

start 48

運行啟動之后,出現(xiàn)錯誤,顯示與 org.xml.sax 包中某些類的 ClassNotFoundException 有關(guān)。

出現(xiàn)這種故障是因為在缺少情況下只為 WAR 文件提供了四個導(dǎo)入:

javax.servlet、javax.servlet.http、javax.servlet.jsp 和javax.servlet.tagext。

使用 Import-Package URL 參數(shù)就可以很容易地解決這個問題:

uninstall 48

install webbundle:file:/Users/robharrop/tmp/formtags.war?Import-Package=

org.xml.sax,org.xml.sax.helpers,javax.xml.parsers,org.w3c.dom

Bundle id is 49

start 49

這里我指定了 FormTags 程序所需的額外的包導(dǎo)入。這次程序成功啟動,并且可以在瀏覽器中通過 http://localhost:8080/formtags 訪問。

在 dm 服務(wù)器中,對于由系統(tǒng)組件導(dǎo)出的每個包,WAR 文件獲得一個導(dǎo)入。這表示對于普通的系統(tǒng)包是自動可用的。我認為這是一個有用的功能。你是否也這樣認為?或者更愿意手動控制對系統(tǒng)包的訪問?

總結(jié)

Web 容器的規(guī)范仍在改進;我盡量讓 RI 保持同步。目前我正在對 dm 服務(wù)器進行修改,試圖讓它使用 Web 容器 RI 而不是它自身的網(wǎng)頁支持。在后續(xù)文章中,我會提供更多相關(guān)的信息。

譯者:司馬牽牛

【編輯推薦】

  1. OSGi為什么重要:向模塊化轉(zhuǎn)移的主攻手
  2. 初探Java企業(yè)級開源框架OSGi
  3. 基于OSGi和Spring開發(fā)Web應(yīng)用
  4. OSGi和Java企業(yè)級開發(fā)的未來方向
  5. 專題:Java基礎(chǔ)教程
責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2009-08-04 17:49:31

Web Page生命周ASP.NET Pos

2009-10-15 15:12:39

Equinox服務(wù)器端Equinox

2015-07-09 15:42:48

ios應(yīng)用生命周期

2009-06-24 10:34:39

JSF生命周期JSF應(yīng)用程序

2015-07-08 16:28:23

weak生命周期

2010-08-01 15:29:04

AndroidDalvik

2014-07-11 11:09:10

App應(yīng)用程序生命周期

2022-04-19 07:20:24

軟件開發(fā)安全生命周期SSDLC應(yīng)用安全

2013-07-31 14:50:32

Windows PhoWP應(yīng)用程序生命周期

2011-07-20 15:58:58

iPhone 應(yīng)用程序 生命周期

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl線程

2011-08-10 16:50:10

iPhone生命周期

2013-09-26 11:20:34

Informatica

2012-05-28 15:37:20

WP程序生命周期

2012-06-14 10:14:46

ibmdw

2009-10-22 11:03:20

OSGi Web應(yīng)用程

2009-06-18 13:32:39

Java線程生命周期

2012-04-28 13:23:12

Java生命周期

2011-06-16 09:31:21

ActivityAndroid
點贊
收藏

51CTO技術(shù)棧公眾號