本文來自InfoQ中文站,原文標題:《Bundle.update:Java EE中的OSGi、JSR 294被叫停》。http://www.infoq.com/cn/news/2010/01/state-of-osgi
自從上次的bundle.update發布以來,在OSGi與模塊化Java領域中發生了一系列值得我們關注的事件:JSR 294被叫停、Enterprise Expert Group發布了第4個草案、WebSphere上可以直接運行OSGi應用以及即將到來的OSGi大會對預先報名者提供折扣優惠,同時演講人招募的時間即將截止。
JSR 294被叫停
Sun領導的兩個模塊化JSR(分別是JSR 294——Java語言改進的模塊化支持,以及JSR 277——Java模塊化系統)都已被叫停。這樣就剩下JCP批准的模塊化系統JSR 291(雖然基於有些古老的OSGi 4.1)仍活躍在各種系統中了,其中也包括Sun新近發布的GlassFish v3應用服務器。
我們尚不清楚JSR 294為何會被叫停(JSR 277已經被叫停一年了)。小組收到的上一封郵件表明:
除了實現JSR以外,JDK 7還將提供特定於實現的特性,比如classpath(沒有任何一個JSR提過這部分內容)以及Jigsaw模塊化系統。
JDK模塊化使用了Jigsaw模塊化系統。模塊化的可見性是由一個原型化的模塊info.Java文件控制的,這在未來可能會發生變化。模塊的私有訪問實際上並沒有在模塊化中使用到,這部分主要是起引導作用的。
關於Jigsaw的進一步討論將在Jigsaw-dev列表中展開。
簡單模塊系統自從被提出後就沒有什麼新進展,盡管版本的事情是由JSR 294控制的,但事實卻並非如此,因為其開發過程是在jigsaw-dev郵件列表上進行的,而該郵件列表卻游離於JSR 294專家組的郵件列表之外。種種事實表明Jigsaw采取了特定於實現的特性來模塊化JDK,雖然這本身是非常好的,但卻無法實現編寫一次,到處運行的模塊。可能以後這都不算什麼大事了,因為JDK 7最早也要到2011年才會發布,應用服務器已經將寶壓在了OSGi上了。
更新:在本新聞發布後,Alex Buckley證實這種停止實際上是自動的,緣於提案發布的時間而不是說項目就停止開發了。
WebSphere、GlassFish、DM Server以及基於OSGi的服務器
Kirk Knoernschild發文表明一些企業正在構築自己的OSGi,WebSphere V7 alpha最近就聲明可以將OSGi bundle部署到WebSphere中(雖然從2006年開始WebSphere server就已經運行在OSGi內核上了)。
最近發布的GlassFish v3也將OSGi運行時引入到了Sun的Java應用服務器中。盡管GlassFish還不支持直接運行本地的OSGi bundle,但我們可以將其置於Equinox和Felix上,可以在運行著的GlassFish服務器上同時運行其他bundle。
SpringSource的dm Server 2.0.0.M6已經可以運行OSGi web bundle了,借助於其bundle倉庫,dm Server指引著企業運行時的前進方向。
Maven 3與Tycho構建、倉庫以及Eclipse Marketplace
隨著Maven 3(其Tycho可以構建基於OSGi的應用)發布日期的臨近,它將成為Eclipse構建EGit以及Tigerstripe的首選。
相對於P2倉庫來說,Maven倉庫的查詢能力受到了人們的質疑,但事實上,Maven倉庫也可以進行查詢。有事實可以證明,Maven倉庫是整個Maven構建過程中最為成功的一個方面,它可以根據依賴關系自動下載所需的程序庫。從Pack200壓縮這個角度來看,P2可能更加高級一些,它還可以更新非JAR組件,然而Mave的über倉庫在廣度上輕而易舉地就超越了Eclipse P2倉庫。不僅如此,P2倉庫經常被切分成多個獨立的倉庫,而Maven則具有一個所有項目都可共享的全局倉庫。
最近,Eclipse基金會發布了Eclipse Marketplace,它源自於成功的Eclipse插件中心2站點。最初建立EPIC的目的是提供一個中央下載站點,為那些不在Eclipse.org站點上的流行插件提供下載服務,比如Findbugs和Checkstyle。
Eclipse基金會在2006年購買了EPIC的使用權,但後來就基本沒再動過它,直到最近開發出了Eclipse Marketplace後這一點才有所改觀。在這段時間內,由於缺乏統一的下載結構以及從Update Site到P2的轉變極大地限制了中央下載站點(用於搜索及下載插件)的發展勢頭。
除了插件以外,新的Marketplace還托管了RCP應用(既有商業的,也有免費的)以及培訓與咨詢供應商。
最後要說的是IntelliJ 9的發布,其社區版與商業版都提供了對OSGi應用的支持。由於該頂級Java IDE可以在本地構建OSGi應用,同時對OSGi應用又提供了巨大的支持,開發模塊化Java應用變得空前的簡單。
OSGi 4.2 EEG草案發布
最近Enterprise Expert Group發布了第4個草案。EEG的目的是定義一套規范以便JEE風格的應用可以作為本地bundle運行在OSGi運行時中。
現在Web應用可以作為bundle使用了。這樣不僅使得OSGi運行時能夠托管WAR(與Jetty之類的服務器一樣),同時WAR還可以在運行時中擁有版本依賴。Pax Web早就可以實現這一點了,但現在形成了標准,任何OSGi運行時都可以使用了。
OSGi框架中對bundle的JMX控制,對於核心OSGi服務的標准化綁定,比如Package Admin以及Cofniguration Admin等等。
事務已經作為JTA綁定的一部分,這樣就可以從OSGi服務中獲取事務了。
JNDI訪問既可以從OSGi中獲取,也可以在OSGi服務間得到。
兼容於OSGi的JDBC工廠(與Class.forName()不同)。
憑借這些服務,企業應用可以運行在OSGi環境中而無需完整的JEE棧。盡管JEE 6已經發布,但它有可能是最後獲得批准的幾個JSR之一,Mark Reinhold如是說:
Q:現在為何不開啟一個closures JSR,讓專家組完成提案工作?
即將到來的OSGi大會
倫敦將於今年1月23日舉辦OSGi DevCon London,同時還將舉辦JAX London。現在,大會的議程已經確定下來了,Kirk Knoernschild將進行主題演講。
Santa Clara將於今年的3月22——25日舉辦OSGi DevCon,同時還有 EclipseCon 2010。Robert “Bob大叔” Martin將進行主題演講。目前還在招募演講者,如果你有這方面的想法,請遞交你的提案。