jigsaw

jigsaw

萬維網協會(W3C)的Web服務器
Jigsaw是萬維網協會(W3C)的一個Web服務器,它是為展示新的Web協議和其他特征而設計的。Jigsaw是用Java編程語言寫的,并且它是一個開源的軟件。你可以在Unix或Windows2000上從W3C網址下載Jigsaw。雖然Jigsaw是設計為一個展示平台而非全能的Web服務器,但W3C說,它的性能和CERN服務器沒有區别,并且它提供了許多一般的Web服務器支持,例如代理服務器的能力,虛拟主機,以及公用網關接口的支持。Jigsaw還可用于傳送用個人主頁以及JSP腳本語言建的或修改的頁面。
    中文名: 外文名:jigsaw 别名: 隸屬:OpenJDK項目 應用:該平台和JDK中 贊助:Java編程語言編譯器小組

曆史

最初,該項目僅僅是為JDK設計、實現一個模塊系統;後來項目組也希望它能為開發者所用——雖然,一開始它并不是JavaSE平台規範的組成部分。随着項目的不斷深入,Java平台對标準模塊系統的呼求也日益增長,JCP批準該項目升級為JavaSE平台的一部分,也能服務于JavaME和JavaEE平台的需求。

至于具體内幕,請參看如下博文:

Themassive,monolithicJDK

PackagingJavacode

TheModularJavaPlatformProjectJigsaw該項目的最新成果演示是Devoxx2009上所做的"TheModularJavaPlatform&ProjectJigsaw",

文檔

RequirementsModule-infogrammarModulesandjavac(pdf)Module-fileformatModularJARfilesNativecodeOptionalmodules&methodsServicesCurrentjavadoc

社區

Mailinglistsjigsaw-devBloggersAlexBuckleyJonathanGibbonsMarkReinhold

項目簡介

在Jigsaw項目成為OpenJDK的一部分時的聲明為了在接下來的幾年中能夠模塊化JDK7,同時也為了更好地宣傳JSR294的工作,Sun打算不久之後在OpenJDK區中創建Jigsaw項目。

該努力必然會創建一個簡單、低層次的模塊系統,其設計将聚焦于模塊化JDK這個目标。開發者可以在自己的代碼中使用該模塊系統,Sun也會全力支持該系統,但它并不會成為官方JavaSE7平台規範的一部分,也不一定會得到其他SE7實現的支持。

如果未來的JavaSE平台包含了特定的模塊系統,那麼Sun将提供一種方式來移植Jigsaw模塊以使之符合相應的标準。同時,我們還會積極地尋求與其他模塊系統交互的方式,尤其是OSGi。

模塊化JDK這個目标應該是可以實現的,尤其是ApacheHarmony已經證明了JDK是可以被模塊化的(使用OSGi)。然而這個目标卻因另一個原因而變得更加有趣:它将在JCP外實現。

由于缺少可視化的發展過程,再加上閉門造車的實現,對于大多數人來說很難參與進JSR277,更别提對其獻計獻策了。通常這會導緻标準的誤入歧途,使得标準過于關注實現的細節而忽視了通用性。不僅如此,這還會導緻标準成為事後諸葛亮——想解決問題時(例如奇數的版本号)卻發現已經太遲了。根據聲明所述,JSR277還處于“領導地位”,但它實際已死。

從JSR277中分離出的JSR294(以前可是個龐然大物,不過現在已經模塊化了)是個很大的進步;它将引入一些語言上的變化,這會使得模塊化的實現獨立于任何特定的模塊化進程。

從聲明中看到的激動人心的事情還有OSGi已經成為模塊化的事實上的标準了,這種合作是件好事。但這不一定意味着它将基于OSGi實現,事實上,它隻是建議最好與OSGi而不是其他方式合作:

JSR277的JAM模塊系統并不适合作為模塊化JDK的基礎,那麼OSGi框架如何呢?該模塊系統非常成熟、穩定和健壯。其核心甚至已經在Java虛拟機中實現出來了,也就是ApacheHarmony。OSGi并沒有與Java語言集成,相反,它構建在JavaSE平台之上而不是其中。

這最後的問題也能解決。Sun現在計劃直接與OSGi聯盟合作以便OSGi框架的未來版本能充分利用JSR294的特性進而能和語言集成的更加緊密。

08年底,Java7新特性展望現在的Java程序員,或者說所有語言的程序員,都面臨着日益增多的開源和商業類庫,往往要花費很長時間來管理其依賴關系。

今天的一個普通企業應用程序往往要依賴數十個外部JAR文件,其本身往往就能包含數十個不同團隊開發的更小内部工程。我們一直在堅持尋找更好的方式來管理日益複雜的依賴關系,以使我們的開發更具重用性,部署更加完整。現在出現了越來越多的類似Maven的依賴關系管理系統,以及諸如OSGi之類的運行時部署系統,這一點正是反應了這種需求的增長趨勢。

在JavaSE7發展初期,兩個重要的JSR曾經試圖解決依賴關系管理問題,分别是JSR294:Java編程語言中的改進模塊性支持(ImprovedModularitySupportintheJavaProgrammingLanguage)和JSR277:Java模塊系統(JavaModuleSystem),兩者分别關注Java模塊概念的開發和部署方面。

一個模塊(module)就是多個實現相同目标且相互存在聯系的類的集合,與JAR類似,但是,根據開發和部署的需要,一個模塊的範圍可以是一個JAR的一部分,也可以是幾個JAR的集合。在2008年中期,JSR294被簡化并合并到JSR277中,以便同一個專家組能夠先後研究這兩個方面。

在2008年12月份,Sun再次重新審視這一計劃,宣布在OpenJDK社區中創建Jigsaw項目,以在明年實現JDK7模塊化。JSR277和Java模塊系統的研究将被放到JavaSE7推出之後進行,而JSR294将被重新恢複研究。Sun已經聲明了此舉的意圖是,與OSGi聯盟更緊密的配合,以便JSR294模塊可以被OSGi所使用。

在JavaSE7中有一個問題将得到解答,即Sun将如何來使用module關鍵字,它是最初的JSR294中的一個重要概念,預計将包含在下一平台版本中。

假定有一個名為Flapjack的項目由幾個Java包(package)組成,該項目包含在基包(basepackage)中的一個publicAPIs,和實現這個API的幾個内部包:

·org.flapjack-publicAPIclasses

·org.flapjack.impl-實現類

·org.flapjack.util-實用類

在JavaSE6中,如果你需要在基包中放置一個工廠類(factoryclass),以實例化内部執行包中的API類,你需要将這個實現類設為public,這樣它們才可以從API包中被看到。由于跨越了不同的包,沒有辦法既允許API以factory方法對類實例化,又不允許外部類直接執行它。

JSR294模塊将允許你聲明整個包集合為一個模塊,你隻需要在源程序中加入以下一個新的聲明:

moduleorg.flapjack;你可以将這個聲明加在你的項目中每一個源程序文件中,也可以将其增加到package-info.java文件中,然後一次将其應用到整個包。雖然module是一個新關鍵字,它是一個“限制性”關鍵字,隻有在特定位置時才被作為關鍵字來處理;因此,它可以在任何其它地方作為普通Java标識符來使用。這使得它擴展了語言的功能,同時又保持了其向後兼容性。

除了新的聲明外,你還可以把module關鍵字當作一個新的可見性修飾符使用,你可以用它來定義一個類,使其僅對同一個模塊中的其它類可見,Listing1演示了module關鍵字的這種用法。

Listing1

moduleorg.flapjack;

packageorg.flapjack.impl;

importorg.flapjack.Flapjack;

moduleclassFlapjackImplimplementsFlapjack

最後,你可以定義一個新的module-info.java僞類,使用元數據來注釋該模塊,增加諸如版本、主類、導入的依賴模塊、導出資源和許多其它預定義或特定的模塊注釋等。值得注意的是,與現有的package-info.java文件一樣,這個新的module-info.java文件使用了一個無效Java源文件名稱,可以避免與已經存在的文件可能發生沖突。

在編譯時,JSR294讓你可以使用javac來編譯你的類。至于在JVM中,Jigsaw項目将如何規定模塊的組成、加載和驗證,尚需拭目以待。

09年5月,JavaOne前夕對Jigsaw的展望

……這個新的模塊系統的第一部分就是JSR-294,即所謂的超級包。也正是這個規範闡釋了Java語言的模塊部分的概念。

JSR-294引入了新的可見性關鍵字“module”。如果一個成員擁有這樣的可見性,那就意味着它隻對同一模塊中的成員可見。它會創建一個内部的API,隻有模塊本身能調用。就此看來,“public”關鍵字應當隻在聲明一個公共的API時才用。而在其他情況下,應當使用“module”或者有更多限制的可見性關鍵字。當然,一旦語言中有了“module”關鍵字,那麼模塊之間的可見性限制将會由編譯器來負責檢查。

JSR-294也允許定義依賴性。你可以在某個給定版本中,定義某個模塊依賴于另一模塊。比如:

//org/netbeans/core/module-info.java

@Version("7.0")

@ImportModule(name="java.se.core",version="1.7+")

moduleorg.netbeans.core;

最後一句表明“org.netbeans.core”模塊依賴“java.se.core”的1.7版本或者更高。這類似于Maven的依賴性或者OSGi的導入。你也可以暫時不要管這些語法,因為将來語法可能會另有變化。重要的是,這兒的依賴是在module-info.java中定義的,會被編譯成class文件。而OSGi中,依賴則是在普通的文本文件中定義的。

Jigsaw項目是這個新模塊系統的第二部分。我預計它會是JSR-294特定于Sun的實現,也會是SunJDK的模塊化實現。既然創建完整的JDK模塊化是有必要的,Sun就希望把标準庫分裝成模塊。這直接簡化了JRE中的内容整合。整個JRE除了Swing之外的所有内容因此都能夠在移動設備上運行。它還有可能為語言引入新的标準API,而無需再等待整個平台的新版本發布。目前看起來,這個項目絕對有希望實現。

但我對此還有個擔憂,那就是,專有的Jigsaw和JSR标準之間的關系并不清晰,正如MarkReinhold所說的:

對Jigsaw的投入無疑會創建出一個簡單的、低層次的模塊系統,它的設計會嚴格地朝着JDK模塊化的目标而發展。開發人員可以把這個模塊系統運用到他們的代碼中去,Sun對這個模塊系統也會是絕對的支持,但它不會是JavaSE7平台規範的官方部分,也可能不會被其他SE7實現所支持。

這段話說的不是很清楚,當中有很多疑問。他的意思是說創建的模塊隻能在SunJRE中運行嗎?還是想說,如果開發者寫了“@ImportModule(name="java.se.core",version="1.7+")”,那麼這個模塊隻能在SunJRE中運行,而不能在IBMJRE環境中運行嗎?或者他的意思是不是說Sun會以某種方式把它的JRE分割成許多模塊,而Oracle會選擇另外的方式去分割嗎?(譯者注:至少現在看來,不太會有這樣的可能了,因為Oracle剛剛收購了Sun)。我們希望都不是,因為還有“編寫一次,到處運行”的原則。

細究起來問題更多。我們并不清楚Jigsaw項目的主要目标是什麼。據項目本身所宣布的主要目标來看,它要實現的是SunJRE的模塊化,但如果純粹是要實現模塊化的話,就不需要對語言做任何改變。Sun可以對JRE進行模塊化,而不修改Java語言本身。

這些語言上的變化會不會成為SunJRE模塊化帶來的副産品?如果是,那就徹底錯了!語言變化必須是一等公民,而不是專屬的副産品。

電影人物

也指《電鋸驚魂》裡的豎鋸。

飾演者:托賓·貝爾,美國演員。生于美國紐約市皇後區,後移居馬薩諸塞州威茅斯。貝爾經常出演罪犯、連環殺手之類角色,比如《電鋸驚魂》系列中的反派,也頻繁在大量電視電影中客串。Bell在現實生活中是一個出了名的愛動物人士。他的五隻貓兩隻狗也曾參演過他的影片。2006年,獲得了MTVMovieAward中的“BestVillain”獎項的提名,并在2007年再次獲得該獎項提名。

上一篇:gtk

下一篇:recover

相關詞條

相關搜索

其它詞條