Eclipse Ganymede已經發(fā)布20多天了,新版本比較Europa版本,在PDE、JDT、Equinox、Platform等方面都做了許多改進和完善。Eclipse的優(yōu)勢是提供了一個可擴展的插件開發(fā)平臺,并且有眾多的廠商(特別是開源廠商)提供豐富的、優(yōu)秀的插件。
RCP應用程序開發(fā),基本上都要涉及到安全、基本控件、數據持久化和應用程序自動升級這幾個問題,Ganymede可以提升RCP應用程序開發(fā)效率。
1. 安全
Ganymede在安全方面,提升了JAAS、安全存儲和對jar文件簽名等技術,讓安全編程并得簡單。例如,要使用JAAS,我們現在可以在插件文件中擴展"org.eclipse.equinox.security.loginModule":
<extension
id="netStarLoginModule"
name="NetStarLoginModule"
point="org.eclipse.equinox.security.loginModule">
<loginModule
class="com.cepiao.circle.auth.module.NetStarLoginModule"
description="com.cepiao.circle.auth.module.NetStarLoginModule">
</loginModule>
</extension>
在JAAS的注冊配置文件中,聲明注冊模塊ID:
NetStar {
org.eclipse.equinox.security.auth.module.ExtensionLoginModule required
debug="true"
extensionId="cepiao.circle.netStarLoginModule";
};
other {
com.cepiao.circle.auth.module.NetStarLoginModule sufficient;
};
這里的“cepiao.circle” 是插件的Bundle-SymbolicName值。
此時,插件的Activator類不是擴展AbstractUIPlugin類,而是實現org.osgi.framework.BundleActivator接口,并在其中讀取JAAS的注冊配置文件內容。更多詳細內容,可以參考Eclipse網站上的相關例子。
2. 控件
富客戶端應用程序開發(fā),需要豐富的控件,諸如:下拉列表、日期選擇等等。Delphi、PowerBuilder如此,Eclipse也需要如此。Eclipse本身提供了豐富的控件,還有其他第三方廠商提供大量控件,能夠滿足富客戶端應用開發(fā)對控件的需求。
例如:利用內容輔助控件(org.eclipse.ui.fieldassist.ContentAssistCommandAdapter),可以實現下拉列表過濾功能。在輸入行政區(qū)劃代碼時,輸入區(qū)劃碼或拼音首字母,就可以過濾符合條件的區(qū)劃記錄。
// Create the find content assist field
final TextContentAdapter contentAdapter = new TextContentAdapter(); //文本內容適配器
final IContentProposalProvider findProposer = new XzqhContentProposalProvider(); //行政區(qū)劃代碼內容建議供應者
final ContentAssistCommandAdapter fContentAssistFindField = new ContentAssistCommandAdapter(
cbcRegional, contentAdapter, findProposer,
ContentAssistCommandAdapter.CONTENT_PROPOSAL_COMMAND,
IContentAssist.AUTO_ACTIVATION_CHARACTERS, false);
fContentAssistFindField .setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
3. 數據持久化
EclipseLink 為 Java 、關系數據庫、XML以及非關系數據源提供了高性能的持久化服務。同類產品有Apache OpenJPA、Redhat Hibernate,不過我比較喜歡EclipseLink,主要是因為它的功能很全面、性能優(yōu)異,而且還是JPA2.0標準的參考實現。
EclipseLink的MOXy(JAXB)模塊,實現Java對象與XML數據之間的相互轉換;JPA模塊實現Java對象到關系數據庫的持久化。如下圖所示:
不過,目前還沒有實現XML與關系數據庫之間的持久化。從EclilpseLink的線路圖上看,關于SDO數據對象的數據訪問服務(Data Access Services ,DAS)將在2009年春季才發(fā)布,還段等待許多時日。
實現XML與關系數據庫之間持久化,有許多開源項目,目前都是通過JDO或者Hibernate方式實現持久化服務。主要有以下幾個項目:
項目
功能
備注
Hyperjaxb2
利用JAXB和Hibernate實現XML數據在關系數據庫中持久化。
當前版本是0.6.2,還不是很成熟。
Castor
Castor是一個開源的Java項目。其主要目標是在XML數據、Java對象和數據庫關系數據之間提供一種直接的映射,使得這三種對象數據可以相互之間自由轉換。
XML在DB中持久化是通過JDO方式實現;JPA方式還在開發(fā)中。
Eclipse Teneo
Teneo以前是elver (
http://www.elver.org/hibernate/index.html)持久化組件,后來并入了Eclipse EMF Tools項目。它的本質就是在 EMF對象和Hibernate/SDO間加了一個橋梁
XML在DB中持久化可以選擇Hibernate和JDO兩種方式。
XMLPipeDB
一個可復用的、開源的XML到關系數據庫持久化工具。
XML在DB中持久化方式:借助了Hyperjaxb2項目完成XML轉化為Java對象,然后利用Hibernate實現Java對象在關系數據庫中持久化.
Hydrate
Hydrate是一個基于Java開發(fā)的工具,能夠在XML, OO對象, 關系數據三者之間進行高效率無差錯的轉換。
目前是2.0.02版,從2007年7月更新后就再也沒有更新。
我喜歡EclipseLink項目領導Doug Clarke寫了一個Dynamic實體持久化的例子。對這個例子稍加改造,就可以實現XML到關系數據庫的持久化。從xml模式(Schema)文件讀取數據庫的表結構,然后利用org.eclipse.persistence.extension.dynamic.EntityTypeFactory定義實體類型;從XML數據文件中讀取數據記錄,利用org.eclipse.persistence.extension.dynamic.DynamicEntity實現持久化服務。
4. 應用程序自動升級
Eclipse更新管理器,可以實現應用程序的升級,在Ganymede版本中,推出了Provisioning Platform(P2)。
首先,P2是一個全新的設計,既可以更新包(bundles),也可以更新其他東西(non-bundles),這擴展了更新管理器的升級范圍。其次,P2澄清了可安裝單元和將要被安裝的制品,早就應該將這兩點分開,既有利于增強應用程序的健狀性,又有利于提高更新效率。最后,P2也解決了很多舊的Eclipse更新管理器所無法克服的問題。
5. 我喜歡的功能
(1)Quick Fix
Eclipse的快速修復(Quick Fix)功能,非常好用。鼠標在錯誤信息處稍做停留,或者是按Ctrl+1,或右鍵選擇Quick Fix,Eclipse就會提供一個修復建議列表。
Quick Fix除了排錯外,還要用于重構代碼,如:用StringBuilder替代字符串連接,改名或者將本地變量轉換為類的屬性(字段)。
(2)比較替換
文件查找替換功能,在Ganymede版本也有所增強,在替換時,提供預覽功能,方便替換前后代碼對照;利用正則表達式替換,可以使用“\C”替換樣式,保留文本的大小寫。另外,還可以對撤消上次已做的替換。
6. 我不喜歡的功能
Ganymede版本包含了用法數據收集器(Usage Data Collector,UDC),將收集用戶如何使用Eclipse的信息,并上傳到 Eclipse Foundation的服務器中,目的在于使用這些數據幫助提交者和組織更好地了解開發(fā)人員如何使用Eclipse。雖然申明不收集有關用戶的任何私人信息,但是無論出于什么目的,記錄用戶的行為信息都是不受歡迎的,就像你住了賓館,才發(fā)現房間安裝了攝像頭。我不喜歡這樣的行為,也不希望看到我喜歡的Eclipse陷入“隱私門”。
禁止用法數據收集器,可以通過“Preferences-->General-->Startup and Shutdown”,將以下兩項前的“√”去掉(不要選中):
Usage Data Gathering Plugin
Usage Data GRecording Plugin
最徹底的辦法就是刪除plugin目錄中與Usage Data Gathering相關的三個插件:
org.eclipse.epp.usagedata.gathering_1.0.0.R200806162215.jar
org.eclipse.epp.usagedata.recording_1.0.0.R200806162215.jar
org.eclipse.epp.usagedata.ui_1.0.0.R200806162215.jar
7. 小結
綜上,Eclipse可以很好地幫助我們提高應用程序開發(fā)效率,如果在RAP、BIRT、TPTP方面改善,將會更加優(yōu)秀。“工欲善其事,必先利其器”,Ganymede就是優(yōu)秀的利器。