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