軟件開發(fā) 2009-01-05 15:53:43 閱讀518 評論0 字號:大中小 訂閱
Java 平臺的第六個版本, Standard Edition (Java SE), 代號Mustang(野馬), 發(fā)布了第二個Beta版本.
今年年初Mustang發(fā)布了第一個Beta版本.掀開了Java SE 6 的神秘面紗.
這一次,是時隔4個月發(fā)布第二次Beta版本.
Java SE 6 Beta 2 (Mustang) 有什么新東西? 有什么值得開發(fā)者關(guān)注?
簡化Web Services
Mustang 將 簡化Web services 的開發(fā)和發(fā)布. XML和Web服務(wù)一直都是Mustang的關(guān)注重點(diǎn).. Mustang為此引入了JAX-WS(Java Architecture for XML-Web Services) 2.0 以及JAXB(Java Architecture for XML Binding) 2.0.. 同時還有Streaming API for XML (STaX), 它提供了一個雙向API,這個API可以通過一個事件流來讀取或者寫入XML,其中包括跳過某個部分,然后直接關(guān)注與文檔中的另外一個小部分的能力。
Scripting,整合腳本語言
目前來講,Java 開發(fā)者們必須在Java之外獨(dú)立地額外編碼來使用non-Java 腳本語言。這個頭痛的問題將被Mustang 消滅,開發(fā)者將更加輕松的使用Perl、PHP、Python、JavaScript 和Ruby等腳本語言。新的框架將允許人們操作任意的腳本語言,和使用Java 對象。
Java SE6中實(shí)現(xiàn)了JSR223。這是一個腳本框架,提供了讓腳本語言來訪問Java內(nèi)部的方法。你可以在運(yùn)行的時候找到腳本引擎,然后調(diào)用這個引擎去執(zhí)行腳本。這個腳本API允許你為腳本語言提供Java支持。另外,Web Scripting Framework允許腳本代碼在任何的Servlet容器(例如Tomcat)中生成Web內(nèi)容。
Database,綁定Derby
開源嵌入式數(shù)據(jù)庫 Derby(JavaDB) 綁定在JDK 1.6中.具體可以參考:JDK 1.6 將綁定開源數(shù)據(jù)庫 Derby
更豐富的Desktop APIs
Mustang中擁有更多強(qiáng)的桌面API提供給開發(fā)者, 開發(fā)者可以更簡單地開發(fā)更強(qiáng)大的桌面應(yīng)用, 比如啟動界面的支持,系統(tǒng)托盤的支持,JTable排序等等
監(jiān)視和管理
Java SE 6中對內(nèi)存泄漏增強(qiáng)了分析以及診斷能力。當(dāng)遇到j(luò)ava.lang.OutOfMemory異常的時候,可以得到一個完整的堆棧信息,并且當(dāng)堆已經(jīng)滿了的時候,會產(chǎn)生一個Log文件來記錄這個致命錯誤。另外,JVM還添加了一個選項(xiàng),允許你在堆滿的時候運(yùn)行腳本。(這也就是提供了另外一種方法來診斷錯誤)
增強(qiáng)的JMX 監(jiān)視API在MBean的屬性值傳入了一個特定的參數(shù)的時候,允許這個應(yīng)用程序發(fā)送一個事件通告。(這里的屬性值可以在很復(fù)雜的類型中)
對于Solaris 10的用戶,為Solaris提供的Hotspot JVM中,提供了一種通過Solaris DTrace(這是個系統(tǒng)的調(diào)試工具)來追蹤顯示JVM內(nèi)部的活動情況,包括垃圾收集,類裝載,線程,鎖等等。
Pluggable Annotations
從Java SE 5 帶來得新特性Annotations,將在Mustang繼續(xù)扮演重要角色..
Compiler API:訪問編譯器
對于Java開發(fā)工具, 或者Web框架 等的開發(fā)者來說, 利用編譯器編譯動態(tài)生成的代碼, 是一個普遍的需求.
Mustang實(shí)現(xiàn)了JSR 199, 提供了Java編譯器API(應(yīng)用程序接口),允許你從一個Java應(yīng)用程序中去編譯其他的Java源程序--比如在應(yīng)用程序中動態(tài)生成的一些源代碼..
Security:安全性
Java SE 6的安全部分,增加了 XML-Digital Signature (XML-DSIG) APIs, 整合了GSS/Kerberos的操作API,LDAP上的JAAS認(rèn)證。
Instrumentation
利用 Java 代碼,即 java.lang.instrument 做動態(tài) Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能從本地代碼中解放出來,使之可以用 Java 代碼的方式解決問題。在 Java SE 6 里面,instrumentation 包被賦予了更強(qiáng)大的功能:啟動后的 instrument、本地代碼(native code)instrument,以及動態(tài)改變 classpath 等等。在 Java SE 5 當(dāng)中,開發(fā)者只能在 premain 當(dāng)中施展想象力,所作的 Instrumentation 也僅限與 main 函數(shù)執(zhí)行前,這樣的方式存在一定的局限性。在 Java SE 6 的 Instrumentation 當(dāng)中,有一個跟 premain“并駕齊驅(qū)”的“agentmain”方法,可以在 main 函數(shù)開始運(yùn)行之后再運(yùn)行。
Http
在 Java SE 6 當(dāng)中,圍繞著 HTTP 協(xié)議出現(xiàn)了很多實(shí)用的新特性:NTLM 認(rèn)證提供了一種 Window 平臺下較為安全的認(rèn)證機(jī)制;JDK 當(dāng)中提供了一個輕量級的 HTTP 服務(wù)器;提供了較為完善的 HTTP Cookie 管理功能;更為實(shí)用的 NetworkInterface;DNS 域名的國際化支持等等。
HTTP Cookie管理可以應(yīng)用客戶操作臨時變量的保存,如查詢條件,當(dāng)前狀態(tài)等
JMX與系統(tǒng)管理
管理系統(tǒng)的構(gòu)架
圖 1. 管理系統(tǒng)構(gòu)架
上圖分析了管理系統(tǒng)的基本構(gòu)架模式。其中 Agent / SubAgent 起到的就是翻譯的作用:把 IT 資源報告的消息以管理系統(tǒng)能理解的方式傳送出去。
也許讀者有會問,為什么需要 Agent 和 SubAgent 兩層體系呢?這里有兩個現(xiàn)實(shí)的原因:
管理系統(tǒng)一般是一個中央控制的控制軟件,而 SubAgent 直接監(jiān)控一些資源,往往和這些資源分布在同一物理位置。當(dāng)這些 SubAgent 把狀態(tài)信息傳輸?shù)焦芾硐到y(tǒng)或者傳達(dá)管理系統(tǒng)的控制指令的時候,需要提供一些網(wǎng)絡(luò)傳輸?shù)墓δ堋?/p>
一般來說,管理系統(tǒng)會將同一物理分布或者功能類似的 SubAgent 分組成一組,由一個共用的 Agent 加以管理。在這個 Agent 里封裝了 1 和 2 的功能。
JMX 和管理系統(tǒng)
JMX 既是 Java 管理系統(tǒng)的一個標(biāo)準(zhǔn),一個規(guī)范,也是一個接口,一個框架。圖 2 展示了 JMX 的基本架構(gòu)。
圖 2. JMX 構(gòu)架
javax.management.MBeanServer
實(shí)現(xiàn)了 Agent 的功能,以標(biāo)準(zhǔn)的方式給出了管理系統(tǒng)訪問 JMX 框架的接口。而 javax.management.MBeans
實(shí)現(xiàn)了 SubAgent 的功能,以標(biāo)準(zhǔn)的方式給出了 JMX 框架訪問資源的接口。而從類庫的層次上看,JMX 包括了核心類庫 java.lang.management
和 javax.management
包。java.lang.management
包提供了基本的 VM 監(jiān)控功能,而 javax.management
包則向用戶提供了擴(kuò)展功能。 JMX幫助開發(fā)者監(jiān)控JVM的信息。 但如果采用運(yùn)行時編譯,可以同時簡化步驟 4 和 5,節(jié)約新進(jìn)程的開銷和寫入存儲器的輸出開銷,提高系統(tǒng)效率。實(shí)際上,在 JDK 5 中,Sun 也提供了調(diào)用編譯器的編程接口。然而不同的是,老版本的編程接口并不是標(biāo)準(zhǔn) API 的一部分,而是作為 Sun 的專有實(shí)現(xiàn)提供的,而新版則帶來了標(biāo)準(zhǔn)化的優(yōu)點(diǎn)。
新 API 的第二個新特性是可以編譯抽象文件,理論上是任何形式的對象 —— 只要該對象實(shí)現(xiàn)了特定的接口。有了這個特性,上述例子中的步驟 3 也可以省略。整個 JSP 的編譯運(yùn)行在一個進(jìn)程中完成,同時消除額外的輸入輸出操作。
第三個新特性是可以收集編譯時的診斷信息。作為對前兩個新特性的補(bǔ)充,它可以使開發(fā)人員輕松的輸出必要的編譯錯誤或者是警告信息,從而省去了很多重定向的麻煩
一些有趣的新特性:
1 本地行為 java.awt.Desktop
比如用默認(rèn)程序打開文件,用默認(rèn)瀏覽器打開url,再也不用那個browserlauncher那么費(fèi)勁
了
Desktop desk=Desktop.getDesktop();
desk.browse(new URI("http://www.google.com"));
desk.open(file)
desk.print(file)
2 console下密碼輸入 java.io.Console
再也不用自己寫線程去刪echo字符了
Console console = System.console();
char password[] = console.readPassword("Enter password: ");
3 獲取磁盤空間大小 java.io.File的新方法
File roots[] = File.listRoots();
for (File root : roots) {
System.out.println(root.getPath()+":"+root.getUsableSpace()
+"/"+root.getTotalSpace());
}
4 專利過期,可以提供合法的lzw的gif encoder了
ImageIO.write(input, "GIF", outputFile);
5 JAXB2.0 增加了java-to-xml schema,完成java bean,xml間轉(zhuǎn)換非常容易
6 xml數(shù)字簽名 javax.xml.crypto,記得以前似乎只有ibm有個類庫實(shí)現(xiàn)了
7 編譯器,以前是com.sun.tools.javac,現(xiàn)在是javax.tools.JavaCompiler
有人寫了完全在內(nèi)存里的生成源文件,編譯,反射運(yùn)行的過程,比較好玩。
8 腳本引擎,javax.script,內(nèi)嵌的是Mozilla Rhino1.6r2 支持ECMAScript1.6(轉(zhuǎn))