成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

本文講述了 Web 容器規范最主要的內容以及編寫 RI 代碼所需的步驟。現在還不能提供規范文檔,但我會概述其中最重要的要點。

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

Web 容器的主要功能

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

◆WAR 文件的安裝

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

◆利用擴張器對 Web 應用程序生命周期的控制

◆利用 URL 參數對配置屬性的控制

安裝 WAR 文件

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

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

install webbundle:file:formtags.war

當然,這要求 OSGi 平臺已經部署 Web 容器。

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

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

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

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

利用擴展器控制生命周期

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

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

start 50

… Tomcat output …

stop 50

使用 URL 參數控制配置

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

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

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

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

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

#p#

Web 容器和 dm 服務器

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

參考實現介紹

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

創建引用實現

為了運行 RI,你需要從源文件中進行創建。源文件可以直接從 SVN 獲取:

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

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

cd build-web-container

ant clean test collect

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

運行參考實現

我使用 PAX Runner 運行 Web 容器 RI。我的 PAX Runner 配置利用創建的二進制文件和 Ivy 管理的相關性來運行 Web 容器。

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

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

該命令使用 PAX Runner 啟動 Equinox。–snapshot 標記用來指示 PAX Runner 下載 Equinox ***的穩定版本——部署了***公布的 OSGi 4.2 規范。

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

安裝應用程序

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

我試圖直接安裝 FormTags 程序,但結果沒有出現預期的結果:

install webbundle:file:formtags.war

Bundle id is 48

start 48

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

出現這種故障是因為在缺少情況下只為 WAR 文件提供了四個導入:

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

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

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 程序所需的額外的包導入。這次程序成功啟動,并且可以在瀏覽器中通過 http://localhost:8080/formtags 訪問。

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

總結

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

譯者:司馬牽牛

【編輯推薦】

  1. OSGi為什么重要:向模塊化轉移的主攻手
  2. 初探Java企業級開源框架OSGi
  3. 基于OSGi和Spring開發Web應用
  4. OSGi和Java企業級開發的未來方向
  5. 專題:Java基礎教程
責任編輯:yangsai 來源: 51CTO.com
相關推薦

2009-08-04 17:49:31

Web Page生命周ASP.NET Pos

2009-10-15 15:12:39

Equinox服務器端Equinox

2015-07-09 15:42:48

ios應用生命周期

2015-07-08 16:28:23

weak生命周期

2009-06-24 10:34:39

JSF生命周期JSF應用程序

2014-07-11 11:09:10

App應用程序生命周期

2010-08-01 15:29:04

AndroidDalvik

2013-07-31 14:50:32

Windows PhoWP應用程序生命周期

2022-04-19 07:20:24

軟件開發安全生命周期SSDLC應用安全

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl線程

2012-06-14 10:14:46

ibmdw

2009-10-22 11:03:20

OSGi Web應用程

2011-08-10 16:50:10

iPhone生命周期

2009-06-18 13:32:39

Java線程生命周期

2012-04-28 13:23:12

Java生命周期

2011-06-16 09:31:21

ActivityAndroid

2025-06-05 02:12:00

2013-09-26 11:20:34

Informatica
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩a在线 | 中文字幕欧美一区二区 | 国产一区不卡在线观看 | 九九综合九九 | 欧美成人专区 | 一级毛片免费完整视频 | 欧美一区二区三区在线观看视频 | 99精品免费久久久久久久久日本 | 天天射天天操天天干 | 色视频网站 | 丝袜美腿一区 | 久久天堂| 天天看天天摸天天操 | 欧美天堂| 伊人狼人影院 | 欧美在线观看黄色 | av大全在线观看 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 自拍偷拍亚洲一区 | 成人免费视频播放 | 一区二区三区国产好 | 人人干在线 | 久久久久久久久99 | 日韩欧美中文字幕在线观看 | 在线资源视频 | 欧美福利影院 | 国产一区二区三区 | 国内精品视频在线观看 | 色约约视频 | 日韩精品在线播放 | 最新国产视频 | 精品熟人一区二区三区四区 | 国产伊人精品 | 国产视频一区二区三区四区五区 | 日本黄视频在线观看 | 久久久国产一区二区三区 | 成人精品一区亚洲午夜久久久 | 国产xxxx搡xxxxx搡麻豆 | 欧美在线不卡 | 精品在线播放 | 337p日本欧洲亚洲大胆鲁鲁 |