Friday June 06, 2008
下一代 Java Plug-in 特色
由於目前的 Applet 有許多的問題,不管是穩定度,效率,和版本相容度都很不好用,上網找了一下資料,沒想到 sun 已經在改版了,且會在 java 6 update 10 上套用,所以在此先翻譯並截錄一下在 jdk6 release 中提到的重點。
原文網址: Release Notes for the Next-Generation Java Plug-In Technology
Java Plug-in 是內建在 Java Runtime Evnironment 中,用來讓 Java Applet 可在各個瀏覽器中使用的技術。
而下一代的 Java Plug-in 將在 Java SE6 Update 10 發行,提供 Applet 更強的可靠度和功能,並且相容舊的版本。
下一代的 Java Plug-in 重新被設計並實作,取消了以往執行 Applet 時的 JVM 是在 web browser 中的 OS process 下跑,而改以新的且獨立在 web browser 外的 OS process 下跑。也因為讓執行 Applet 的 JVM 和 web browser 是不同的 OS process,所以為了提高 JVM 和 web browser 中溝通能力,也提供了許多新的特性,說明如下。
| Improved reliability | 執行 Applet 的 JVM 在同樣的 OS 層中獨立在 web browser 外跑,如果 Applet 有問題或是不肯關閉,新一代的 Java Plugin 會偵測並處理這些錯誤,而不會影響到 web browser 的運作。 |
| Built-in JNLP support | 新一代的 Java Plug-in 提供可以直接透過Java Web Start 使用的 JNLP 檔案來啟動 Applet 的能力。所以開發人員現在可以在 Applet 中使用 JNLP 特性帶來的進階功能,如- JavaFX run-time libraries, 3D graphics via OpenGL, and planetary-scale terrain visualization,Applet 現在可以透過 JNLP APIs 達到永續性的資料儲存,Client 端的檔案存取,和其他 sandboxed code 中有用的功能。 |
| Per-applet command-line arguments | 每一個 Applet 可以使用不同的 JVM 啟動參數,如調整 heap size, Java 2D 硬體加速特色。使用 JNLP 來啟動 Applet,則可以吧 JVM 的啟動參數或 system properties 設定在 JNLP 檔案內即可。而用以前一般網頁的 Applet tag 則可以將這些參數設定在網頁 html 中。 |
| Multiple JRE version support | 每一個 Applet 可以要求在不同的 JVM 中執行。這個特色是設計用來給企業級的使用者,讓他們可以讓 Applet 在不同的 JRE 版本中執行。 |
| Improved Java/JavaScript communication | 用來提供 Web Browser 中的 JavaScript 引擎與 Java programming language 溝通的*橋樑*,已被重新實作。新的實作在 Java 呼叫 JavaScript,或是 JavaScript 呼叫 Java 的能力中,提供了往前的相容性與新的特性,提高了可靠度、效能,與跨 browser 的可攜性。 從前 Mozilla 才有的 "LiveConnect" 功能-從 JavaScript 去呼叫 static java method、建立(new)一個 java object,或引用 3rd-party 的 package。這些功能,都可以在所有的 Browser 中使用了。 |
| Improved user experience | 新一代 Java Plug-in 會在背景啟動 Applet,所以在 Applet 未準備好時,網頁都是可以操作的,而 Applet 只會在可執行時才出現在網頁上。 |
| Improved applet lifecycle management | 改進了由各家 Browser 行為決定呼叫 applet 的 init(), start(), stop(), destroy()。Applet Class loader 為了往前相容,也快取和保留了 applet lifecycle。 |
| Better large heap support | 以前,最大的 heap size 必須透過用戶端電腦的 Java Control Panel 來設定,現在,已經可以直接透過 Applet 參數來設定了。 |
| Better Windows Vista support | 在 Vista 的保護模式 IE 中執行簽章過的 Applet,已經可以擁有像一般應用程式的權利,解決了在這個平台上的可攜性。 |
新一代 Java Plug-in 設計用來在底下的瀏覽器中工作:
大部份在新一代 Java Plug-in 中新的功能,是透過 <applet>, <objtct> 和 <embed> 這些 tag 來引用。
官方建議透過 Deployment Toolkit 來自動產生在 HTML 中用的 applet tag。這裡有 deployment advice 說明書來說明如何使用 Deployment Toolkit。
底下等下會介紹的參數,可以簡單的透過一個 parameters 陣列傳給 Deployment Toolkit's JavaScript library 的 runApplet method。或者,你可以手動的使用 PARAM tag 或相同功能的 EMBED tag 來加入這些參數進你已經存在的 Applets。請查閱 Java Plug-In Guide 的 Using APPLET, OBJECT and EMBED tags 章節來了解更多細節。
底下的介紹都直接使用 <applet> 和 <param> tag 來說明。
所有的參數都是非必要的,若沒設定,則都使用各參數的預設值。
新一代 Java Plug-in 可以使用 JNLP 檔案格式來當做啟動 Applet 的描述子,如此,Applet 就可以直接使用以前已經寫好的 Java Web Start 應用程式而不用重寫,使用參數 jnlp_href 來設定 JNLP 檔案的位址。
參考 JNLP Support in the New Java Plug-In 以得到更多訊息。
<applet width="300" height="300" code="PiaoApplet" archive="piao.jar"> <param name="jnlp_href" value="piao.jnlp"> </applet>
新一代的 Java Plug-in 可以拿我們自己做的影像來做為 Applet 載入前的啟動畫面,且支援動畫的 GIF 格式。只要使用參數 image ,更多細節在 Java Plug-In Developers' Guide 的 Special Attributes 中。並且又增加了底下二個參數 boxborder, centerimage。
<APPLET archive="piao.jar" code="PiaoApplet" width="300" height="300"> <!-- 使用一個動畫的 GIF 做為啟動畫面 --> <PARAM NAME="image" VALUE="animated_logo.gif"> <!-- Applet 中的影像是否要有一個邊框 --> <PARAM NAME="boxborder" VALUE="false"> <!-- 置中影像 --> <PARAM NAME="centerimage" VALUE="true"> </APPLET>
一個 boolean 值,用來指示要不要在影像的周圍加一個 1-pixel 的邊框。預設值是 true。
官方建議設成 false 較好看。
一個 boolean 值,用來指示要不要把影像置中,而不是在左上角,預設值是 false。
注意,java_arguments 及 java_version 的參數在這設定是因為本質上的考量所做的權宜之計,建議的設定方式是透過 JNLP 設定。
範例:
1.設定 max heap size.
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_arguments" value="-Xmx128m"> </APPLET>
2.設定 max heap size 與 Java 2D 硬體加速選項(通常在 Applet 透過 JOGL 使用 OpenGL 時)
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_arguments" value="-Xmx256m -Dsun.java2d.noddraw=true"> </APPLET>
3.啟用GC 的 verbose 輸出與 Assertion。
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_arguments" value="-verbose:gc -ea:MyApplet"> </APPLET>
更多訊息:
在 Java Web Start Developers' Guide 的 JNLP File Syntax 中定義了一些安全的 JVM 參數和 system properties。在新一代的 Java Plug-in 中,可在 java_arguments 中設定的是安全的參數,這樣這個 applet 在載入這些 class 時,這些 class 不需要被簽章。
因 java_arguments 也可設定不安全的參數,這樣就會有安全上的風險。所以 Java Plug-in 強制不載入這些 class,除非這些 class 是被信任的或是簽過章的,否則會丟出 ClassNotFoundException。
另外還有一些 JVM 參數是不允許的,如 -Xbootclasspath,-classpath 或 -jar 等。
注意,在 Client 電腦中的 Java Control Panel 中設定的 JVM 參數,是會套用在所有啟動的 JVM 上的,而透過 Applet 上的 java_arguments 參數設定的 JVM 參數,是不會全部取代 Client 電腦上另外設定的 JVM 參數。
設定 Applet 使用的 JRE 版本。
範例.
1.設定一個唯一的版本。
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_version" value="1.5.0_09"> </APPLET>
2.設定某一個系列的版本。
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_version" value="1.5*"> </APPLET>
可往前使用的JRE 版本,參考 JRE Version Selection in the Next-Generation Java Plug-In,截取重點如下:
一個 boolean 值,用來指示該 Applet 是否使用自己有的 JVM instance。這個功能是為了讓使目者可以建立像桌面軟體一樣強的功能的 Applet。
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="java_arguments" value="..."> <PARAM name="separate_jvm" value="true"> </APPLET>
通常,如果有二個 Applet 有相同的 codebase 和 archive 參數,則會使用同一個 class loader 來載入。
新一代的 Java Plug-in 提供了二個使用同一個 JVM 的 Applet ,可以有各自的 class loader 載入 class,而不用同一個,如此,這樣像引用同一個 class 的 static member 時,就不用衝突(如,我可能用一個 class 來放 UI 上使用的字型名稱,而這個我把它設為 static)。
這個參數名為 classloader_cache,預設值為 true。
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300"> <PARAM name="classloader_cache" value="false"> </APPLET>
原本在 Control Panel 中,只有在 Java Web Start 那塊設定中才有的 Find 和 Add, Remove 按鈕,現在在 Java Runtime Versions 裡也有了,而且也可以設定使用的 JVM 參數和是否讓某版 JRE 可在 Browser 使用的 checkbox。

為了相容性考量,若想用這些新的功能設定,必須在 Java Control Panel 中設定為啟用,才可以生效。

用來提供 Web Browser 中的 JavaScript 引擎與 Java programming language 溝通的*橋樑*,已被重新實作。新的實作在 Java 呼叫 JavaScript,或是 JavaScript 呼叫 Java 的能力中,提供了往前的相容性與新的特性,提高了可靠度、效能,與跨 browser 的可攜性。
從前 Mozilla 才有的 "LiveConnect" 功能-從 JavaScript 去呼叫 static java method、建立(new)一個 java object,或引用 3rd-party 的 package。這些功能,都可以在所有的 Browser 中使用了。
這個是指在新版的 Java Plug-in 中,我們可以把一個正在執行的 Applet,拉到 web browser 外,變成一個 desktop 上跑的應用程式。而且還可以透過桌面上的圖示來重新啟動這個程式。
因為 Sun 在這註明了未來可能會保留或拿掉 Experimental Functionality 這個特色,所以不確定這項功能會不會存在,我就不再說明下去,直接寫上他說明的使用方式,還有列出哪些在拖曳的過程中會觸發的事件,你可以用來處理。
// 在 applet tag 中設定 draggable 參數, <param name="draggable" value="true">
public boolean isAppletDragStart(MouseEvent e); public void appletDragStarted(); public void appletDragFinished(); public void setAppletCloseListener(ActionListener l); public void appletRestored();
Posted at 2008-06-06 15:38 by Piaoyi Kao in Java | Permalink | Comments[1]
Thursday May 29, 2008
Useful Eclipse Plugins
記錄一下我常用的 Eclipse Plugin,好在換新版 Eclipse 時,還記得要裝哪些 Plugin。
我都直接抓Eclipse+WTP SDK,所以 WTP 和 GEF plugin 就不寫了。
因為還在整理,已忘了有裝哪些,所以會再持續更新。
| Subclipse | |
|---|---|
| Update Site: | http://subclipse.tigris.org/update_1.2.x |
| Description: | Subversion 版本控制工具。 |
| Properties Editor (Resource Bundle Editor) | |
| Update Site: | http://propedit.sourceforge.jp/eclipse/updates/ |
| Description: | 編輯I18N .properties 用的Editor,編輯時可以用你的字元集(假設是zh_TW,即你在看和編輯時,都是中文呈現),存檔時他會自動轉成 unicode \uxxxx,但編輯時不會看起來是 \uxxxx (native2ascii)。 我習慣用這個。 |
| JInto (Resource Bundle Editor) | |
| Update Site: | http://www.guh-software.de/eclipse/ |
| Description: | 編輯I18N .properties 用的Editor,一個頁面含全部語系的 .properties ,以 Table 方式呈現來填入,編輯時看起來一樣是對應的字元集,不會是 \uxxxx (native2ascii)。 這個功能較強大,所以我也裝,也因我裝了二個處理 .properties 的plugin,所以這個我都用 open with 方式來選擇用這個 plugin 開啟 .properties。 |
| Implementors | |
| Update Site: | http://eclipse-tools.sourceforge.net/updates/ |
| Description: | 讓 Eclipse 可以追蹤 Concrete class method 的工具。 java editor 上,你可以點一個 class or method name,然後按右鍵選 Open Declaration 跳去看他的內容,但如果這個 class or method 是 interface,你跳過去看就沒意義,這個 plugin 就是讓你可以跳到實作 interface 的 concreate class 來觀看,只要點了之後,按右鍵選 Open Implementation 即可。 |
| Lifesting | |
| Download URL: | http://www.blogjava.net/lifesting/archive/2008/04/11/192250.html |
| Description: | 讓你可以將文件的原本編碼A轉成編碼B。 這在變更 Eclipse 工作區 charset encoding時很有用,可能原本是 MS950,在透過變更 Eclipse Preferences 後把 encoding 改 UTF-8,會讓原本有中文的檔都變亂碼。 用這個工具,你可以在未將工作區從 MS950 變更為 UTF-8 前,先用 Lifesting 來將文件轉成 UFT-8,再將工作區變更為 UTF-8 即可。 |
| Maven2 | |
| Update Site: | http://m2eclipse.sonatype.org/update/ |
| Description: | Maven - A software project management and comprehension tool。 比 Ant 強大的 framework,應該不能直接比,但ant 的功能,maven 都辦的到,而且很多 opensource 的 project 目前也都從 ant 改用 maven 來建置與管理。 而這個是 Maven Plugin for eclipse,讓我們可以不用下 command 的方式執行。 |
| SpringIDE | |
| Update Site: | http://springide.org/updatesite/ |
| Description: | SpringIDE,讓你可以在 Eclipse 中以樹狀圖形來觀察 spring xml config 中的 bean reference 關係,且在 xml 中提供 auto complete 功能與檢查 xml 中設定 class 是否存在。 |
| TestNG | |
| Update Site: | http://beust.com/eclipse |
| Description: | TestNG。一個比 JUnit 強的Test Framework。可以用 Java Annotations 來設定,也可以用來跑 JUnit。 |
| Mylyn | |
| Update Site: | http://download.eclipse.org/tools/mylyn/update/e3.3 |
| Description: | Mylyn,一個 Task Focus Development Tool。除了 local repository,也可和某些 Issue System 結合使用,如 JIRA,Bugzilla,Trac。 |
| Mylyn Extras | |
| Update Site: | http://download.eclipse.org/tools/mylyn/update/extras |
| Description: | Mylyn Extras:JIRA,Trac Connector 要從這裝。 |
| CheckStyle | |
| Update Site: | http://eclipse-cs.sourceforge.net/update |
| Description: | 編碼標準分析。 讓開發自動化:用 Eclipse 插件提高代碼質量 |
| Coverlipse | |
| Update Site: | http://coverlipse.sf.net/update |
| Description: | 測試代碼覆蓋率。 讓開發自動化:用 Eclipse 插件提高代碼質量 |
| CPD | |
| Update Site: | http://pmd.sourceforge.net/eclipse |
| Description: | 複製/粘貼檢驗。 讓開發自動化:用 Eclipse 插件提高代碼質量 |
| JDepend | |
| Update Site: | http://andrei.gmxhome.de/eclipse |
| Description: | 包依賴項分析。 讓開發自動化:用 Eclipse 插件提高代碼質量 此 update site 同時還有其他有用的 plugin,如下: FileSync plugin Extended VS Presentation plugin Bytecode Outline plugin AnyEdit plugin http://andrei.gmxhome.de/eclipse.html |
| Metrics | |
| Update Site: | http://metrics.sourceforge.net/update |
| Description: | 複雜度監控。 讓開發自動化:用 Eclipse 插件提高代碼質量 |
| FindBugs | |
| Update Site: | http://findbugs.cs.umd.edu/eclipse |
| Description: | FindBugs。 FindBugs:提高代碼質量 |
| Fat Jar | |
| Update Site: | http://kurucz-grafika.de/fatjar |
| Description: | 一個幫你把所有的 class 和引用的 jar 匯出成一個 jar 的工具。 http://fjep.sourceforge.net/ |
| Eclipse HTTP Client (Http4E) | |
| Update Site: | http://http4e.roussev.org/install/ |
| Description: | 一個一個可以製造 HTTP Calls 的 Eclipse GUI,對 Web Development, Web Services and Rest Services 好用的工具。 http://http4e.roussev.org/ |
| Keytool | |
|---|---|
| Update Site: | http://keytool.sourceforge.net/update/ |
| Description: | Keytool is an Eclipse plugin that maintains keystores and certificates。 |
| Groovy | |
| Update Site: | http://dist.codehaus.org/groovy/distributions/update/ |
| Description: | Plugin for compile and run groovy。 |
| Android | |
| Update Site: | https://dl-ssl.google.com/android/eclipse/ |
| Description: | 開發 Google Phone 用的 Toolkit。 |
| EclipseMe | |
| Update Site: | http://www.eclipseme.org/updates/ |
| Description: | 開發 Java ME 用的 Toolkit。 |
| Visual Editor | |
| Download URL: | http://eclipse.org/vep |
| Description: | Eclipse Visual Editor,一個視覺化的 AWT, Swing, SWT 編輯工具。 聽說 Netbeans 的 VE 比較強比較好用,不過我已習慣直接寫Swing Code 而沒用 VE,所以我也懶的試 Netbeans,也不想要開發過程一下子用 Netbeans 一下子用 Eclipse,不過 Eclipse VE 覺的小~~容易當,我都拿它來拉簡單的畫面測試用而已。 |
| SQL Explorer | |
| Update Site: | http://eclipsesql.sourceforge.net/ |
| Description: | 可在 Eclipse 中連 DB 的 Tool。 |
| AntView | |
| Download URL: | http://r2tech-eclipse.sourceforge.net/ |
| Description: | 可把 ant build file 圖形化顯示。 |
| Eclipse Version Tree Plugin for CVS | |
| Download URL: | http://versiontree.sourceforge.net/ |
| Description: | 把CVS上文件的各版本以樹狀連結顯示變化。 |
| QOLdap | |
| Download URL: | http://qoldap.sourceforge.net/ |
| Description: | Eclipse 中的 LDAP Browser。(尚未測試) |
| Apache Directory Studio | |
| Update Site: | http://directory.apache.org/studio/update/1.x/ |
| Description: | Eclipse 中的 LDAP Browser 和 Editor。(尚未測試) |
| Jode Decompiler | |
| Update Site: | http://www.technoetic.com/eclipse/update |
| Description: | Eclipse下的Java decompiler。試用jdk1.5一直反組譯失敗,可能只能 jdk1.4 以前版本。 |
| JavaFX | |
| Update Site: | http://download.java.net/general/openjfx/plugins/eclipse/site.xml |
| Description: | JavaFX |
| Eclipse Regular Expression Tester | |
| Update Site: | http://brosinski.com/regex/update |
| Description: | Regular Expression Tester,裝了沒測,不確定好不好用。 |
| QuickREx | |
| Download URL: | http://sourceforge.net/projects/quickrex/ |
| Description: | 也是一種 Regular Expression Tester QuickREx Doc |
| UniMod | |
| Download URL: | http://unimod.sourceforge.net/ |
| Description: | UniMod 是一個 Executable UML 的 Implement,不過我還沒時間試用。 |
| Eclipse wiki Editor | |
| Update Site: | http://www.stateofflow.com/UpdateSite |
| Description: | A powerful project documentation tool linking documentation to eclipse resources, web sites, bug tracking tools and other Wikis。(尚未測試) http://eclipsewiki.sourceforge.net |
Posted at 2008-05-29 23:40 by Piaoyi Kao in Java | Permalink | Comments[1]