dbeaver 調試運行


本文記錄通過Debug dbeaver 項目學習到的RCP相關零散知識點。

eclipse 官方文檔

WindowBuilder 使用方法


dbeaver 項目部署到eclipse 和 idea,並進行debug調試,查看PDF文檔

1.項目啟動

eclipse rcp應用,使用了osgi框架:equinox,那么應用啟動入口點是 org.eclipse.equinox.app.IApplication 接口類。在 dbeaver 中,額外定義了一個接口類 org.jkiss.dbeaver.model.app.DBPApplication ,該接口作用是意圖通過調用接口中的方法來重新定義 dbeaver的行為或者設置。dbeaver 定義了一個抽象類 org.jkiss.dbeaver.registry.BaseApplicationImpl 實現了上述兩個接口,最終提供了一個類 org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication繼承了BaseApplicationImpl  抽象類。即dbeaver項目啟動會從DBeaverApplication 進行入口。項目入口定義在/org.jkiss.dbeaver.ui.app.standalone/plugin.xml 文件中:

 

 

 

以下是DBeaverApplication 類圖:

 

 

 

 

 

 

2. /org.jkiss.dbeaver.ui.app.standalone/plugin.xml

該xml文件定義了程序入口程序,下面看下程序打開主界面菜單控件的定義。

菜單定義在 <extension point="org.eclipse.ui.menus"> 節點中。看下一個編輯控件菜單定義:

 

 

 

 

 

 

以上菜單定義控件commandId 是以 org.eclipse.ui 開頭,表示這是eclipse內置的控件,該控件在應用啟動時會自動注冊commandId對應的事件行為。而我們自定義的commandId 比如 org.jkiss.dbeaver.core.new.connection,

 

 

該commandId定義方式如下:

a. 定義commandId,並定義觸發該commandId的事件處理類

 

 

b. 定義commandId的名稱,描述文字,以及類別

 

 

c. 定義commandId的顯示圖片

 

 

定義好后,就可以使用commandId對應的控件,如:

 

 

3. 點擊控件彈出對話框及界面顯示處理

以 org.jkiss.dbeaver.core.new.connection 新建連接為例

 

 

從上述分析中,可以找到該控件的點擊處理事件,org.jkiss.dbeaver.ui.actions.datasource.DataSourceCreateHandler ,可以找到這個代碼:

 

 

是打開一個對話框,對話框具體處理方法在 NewConnectionDialog.openNewConnectionDialog(window) 中,該方法中會調用NewConnectionDialog 的 open方法打開即將要打開的新建連接向導頁面。

 

 

通過debug,發現最終會調用 org.eclipse.jface.wizard.WizardDialog#createContents 方法 ,先去addPages(),然后再createContents

 

 

 

NewConnectionWizard 類圖

 

 

進入到NewConnectionWizard 類中將會執行org.jkiss.dbeaver.ui.dialogs.connection.NewConnectionWizard#addPages 方法,向向導頁面中添加頁面,該方法是在 org.eclipse.jface.wizard.Wizard 抽象類中進行定義,可以查看相關類注釋

 

 

4. 查詢管理器

查詢刷新按鈕事件:  org.jkiss.dbeaver.ui.controls.querylog.QueryLogCommandHandler 最終在方法  org.jkiss.dbeaver.ui.controls.querylog.QueryLogViewer.EventHistoryReadService.evaluate(DBRProgressMonitor) 中進行歷史數據過濾。執行SQL歷史記錄是暫存在 org.jkiss.dbeaver.runtime.qm.QMMCollectorImpl.eventPool 這個List 數組中,因此程序重啟,原先歷史記錄就會消失。操作SQL觸發添加歷史記錄方法事件: org.jkiss.dbeaver.runtime.qm.QMMCollectorImpl.fireMetaEvent(QMMObject, Action)。

日志查詢器鼠標右擊菜單在 org.jkiss.dbeaver.ui.controls.querylog.QueryLogViewer.createFiltersMenu(IMenuManager) 該方法進行初始化

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM