首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Eclipse RCP 與 OSGi 規範在客戶端與伺服器端的雙邊實踐:RPC Software 案例研究

     編輯:Java 相關知識

訂製傢俱行業 ERP 供應商 RPC Software,憑藉 Eclipse RCP、OSGi、DotProject、SugarCRM 開源棧,擊敗傳統專有軟體競爭對手。本文深度剖析其 Core Business 產品線如何利用 OSGi 動態模組系統、Eclipse RCP 豐富客戶端框架、Tomcat 插件化改造,實現客戶端/伺服器端代碼複用、功能模組化交付、瀏覽器嵌入式報表整合的工程化最佳實踐。

業務背景與解決方案全景

客戶需求:銷售、報價、訂單、工時追蹤、倉儲、財務、報表全覆蓋,且需模組化升級、資料交換標準化 (OFDA-XML)、Web 協作門戶。RPC 方案三支柱:

  • Core Business ERP:Eclipse RCP + Tomcat 富客戶端/伺服器端雙模式。
  • 專案管理:DotProject (PHP) Web 方案,無需胖客戶端即可多方協作。
  • CRM:SugarCRM (PHP) Web 方案,即將發布。

兩資料庫整合實現 Core Business、Core Vision、Core CRM 三產品數據互通,單獨使用 DotProject/SugarCRM 無法做到。

OSGi 與 Eclipse RCP:模組化架構基石

OSGi 定義動態組件模型:Bundle 遠程安裝/啟動/更新/解除安裝無需重啟,服務註冊發現支援動態繫結。Eclipse RCP 架構於 OSGi 之上:

  • Java 類與資源模組化為 Jar → Plugin (擴展 OSGi Bundle)。
  • XML 擴展點定義入口點與依賴元數據,框架依依賴關係從切入點啟動所需 Plugin。
  • 同一安裝包雙模式啟動:客戶端入口點排除伺服器功能 Plugin;伺服器入口點 (JNIWrapper 建立 Windows 服務) 排除 UI/SWT Plugin,共享業務邏輯 Plugin。

Core Business 客戶端:SWT/JFace 原生體驗與動態擴展

  • 選擇 RCP 理由:資料輸入密集不適合 Web、SWT 原生外觀優於 Swing/C#、視窗/選單/偏好設定框架開箱即用。
  • 模組化交付:核心應用 Plugin + 客戶定製 Plugin(如特殊報表、計算邏輯),非所有客戶需 Time Entry 等功能。
  • 擴展點驅動動態發現:客戶定製 Plugin 宣告 xsltTransforms 擴展,核心系統無感知即運行時自動採用新報表樣式 (XSLT)。

Core Business 伺服器端:Tomcat 插件化改造實現代碼零複製複用

挑戰:伺服器端需複用客戶端 Hibernate、Jasper Reports 等業務邏輯與第三方庫。傳統 WAR 打包導致構建腳本複雜、維護困難。

解決方案:讓 Tomcat「Plugin 化」:

  1. 參考 Eclipse Help 內嵌 Tomcat,將 servlet.jar 移入自建 Plugin,其他依賴 Servlet API 的 Plugin 即可複用。
  2. 修改 Tomcat Plugin 使用 Eclipse JDT 編譯器,僅需 JRE 無需 JDK。
  3. 核心突破:改造 PluginClassLoaderWrapper 類別載入器,覆寫 getURLs() 收集 Plugin 依賴鏈的所有 Classpath (含 Bundle-Classpath、開發時路徑、RPC 自定義邏輯解析 Bundle 位置),解決 JSP 編譯器需要知道完整 Classpath 的難題。

// 關鍵片段:收集 Plugin 及其先決條件的所有 URLs
private Set getPluginClasspath(String pluginId) {
    Set plugins = new HashSet();
    addPluginWithPrereqs(pluginId, plugins); // 遞歸收集依賴
    Set urls = new HashSet();
    for (Iterator it = plugins.iterator(); it.hasNext();) {
        String id = (String) it.next();
        Bundle b = Platform.getBundle(id);
        // 解析 Bundle-Classpath、處理 Bundle 位置 URL 轉換 (initial@reference:file:, update@ 等)
        // RPC 自定義邏輯:從 Bundle Location 推導實際 Jar 路徑並加入 urls
    }
    return urls;
}

優勢總結:超越傳統 WAR 部署

  • 代碼複用極致:客戶端/伺服器端共享同一組業務 Plugin,零複製、零差異。
  • 部署簡化:單一安裝包,客戶端啟動即用;伺服器端捆綁 Tomcat Plugin,免安裝配置 Tomcat、免 WAR 部署測試,大幅縮短現場實施週期。
  • 可靠性提升:Plugin 依賴關係靜態驗證,運行時動態解析,避免 Classpath 地獄。

瀏覽器整合:SWT Browser 組件無縫銜接 Web 報表

歷經 Apache FOP、Jasper Reports、Java Printing API 多工具並存,客戶需在客戶端無縫瀏覽伺服器端報表。SWT Browser 組件幾行代碼即刻實現:


final Browser browser = new Browser(shell, SWT.NONE);
browser.setUrl("https://server/report?type=pdf");

下拉組合框動態生成 URL 請求伺服器,實現報表類型客戶端選擇、伺服器端渲染、客戶端原生瀏覽一體化體驗。

回顧與展望

  • Eclipse RCP 證明為健壯框架:單一代碼庫滿足多樣客戶、開源可按需擴展、Java 生態 (Hibernate/Jasper Reports/Apache FOP) 加速開發。
  • PDE 開發環境讓 RCP 開發同等 Java 開發高效,Jasper Report Generator、TPTP 等 IDE Plugin 進一步賦能。
  • 未來:遷移報表至 Eclipse BIRT、利用 Eclipse Update Site 分發產品更新與廠商目錄、深化 SugarCRM 整合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved