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

使用 Eclipse Ganymede 進行 RAP 開發:從 RCP 遷移到 Web 應用(上)

     編輯:Java 相關知識

教程簡介

Eclipse Ganymede 發行版包含 24 個獨立專案,涵蓋多元技術。本系列三部曲介紹 Ganymede 新特性:RCP(桌面)、RAP(Web)、eRCP(行動裝置),以及 Subversion 版本控制與 p2 更新安裝系統。本教程(第 2 部分)著重於 Rich Ajax Platform (RAP),示範如何將既有 RCP 程式碼遷移至 Web 平台。

開始前的準備

本教程適合想了解如何將成熟 RCP 程式碼修改為 RAP 以實現 Web 豐富客戶端體驗的 Eclipse 開發者。需熟悉 Eclipse 平台與 Rich Internet Application (RIA) 概念,並知道如何配置與部署 Servlet 容器。

系列架構

  • 第 1 部分:RCP 新特性、Subversion 整合、p2 打包分發系統
  • 第 2 部分:引入 RAP 撰寫 Web 應用程式(本教程)
  • 第 3 部分:使用 eRCP 開發行動裝置應用程式

RAP 概覽

Ganymede 新增的 Rich Ajax Platform (RAP) 用於建構豐富客戶端應用程式——類似桌面有狀態 GUI 應用——並部署至 Web。RAP 將 Eclipse 程式設計模型引入 Web,構建 RAP 應用時可重用大部分既有 RCP 程式碼。這透過 Ajax 達成,但 Eclipse 讓您輕鬆利用 RCP 開發桌面應用的知識。為示範遷移過程,您將把第 1 部分開發的備忘記事本修改為使用 RAP。

核心主題

  • 下載並安裝 RAP 環境至 Eclipse
  • 將既有 RCP 程式碼遷移至 RAP
  • 為 Web 重構程式碼
  • 打包並部署至 Web 伺服器

系統需求

  • Eclipse Ganymede(Eclipse Foundation)
  • Java 2 Standard Edition V5+(Sun Microsystems)
  • Eclipse RAP(Eclipse.org RAP 專區)
  • Apache Tomcat(部署獨立 Servlet 容器)

開始使用 RAP

開發前必須從 Eclipse 網站下載並設定目標平台。

RAP 開發模型

RAP 允許使用 Eclipse 開發模型建構啟用 Ajax 的 Web 應用程式。若熟悉 RCP 桌面開發,已具備 RAP 開發技術。大部分 RCP 程式碼可在 RAP 中重用,意味著您能充分利用 Java 技術與 Eclipse API 開發 Web 應用。使用者將體驗無需重新整理頁面的完整 GUI 應用,且無需在桌面下載安裝。RAP 提供特殊的 Standard Widget Toolkit (SWT)、JFace 與 Workbench 實作(實際上是 RCP 子集)來達成此目標。

由於 RCP 與 RAP 基礎架構相似(見圖 1),源代碼極少修改即可實現外掛重用。同樣透過標準瀏覽器存取 RAP 應用,這由 RAP Widget Toolkit (RWT) 實現,取代 RCP 中的 SWT。

比較 RAP 和 RCP 的架構

瀏覽器端元件呈現使用 qooxdoo Ajax 函式庫,一個功能完善的物件導向 JavaScript 框架,支援跨瀏覽器應用。RAP 抽象化 JavaScript 細節,讓您使用 Java API 建構 RIA。自訂元件開發者需具備 JavaScript、qooxdoo 與 RAP 知識。客戶端開發允許嵌入其他 JavaScript 框架、Flash 與 Applet 等技術。

下載 RAP

RAP 是 RCP 子集,無法與 RCP 共存於同一 Eclipse 實例;必須單獨下載安裝 RAP 環境。

  1. 瀏覽 www.eclipse.org/rap/downloads(見圖 2)。
  2. 若要遷移 RCP 原始碼,建議下載「target platform」版本,可針對目標 RAP 程式碼編譯執行既有 RCP 程式碼。若偏好開發新 Web 應用並需開發平台,建議透過 p2 更新機制取得 RAP SDK(第 1 部分已介紹)。
  3. 選擇檔名含「target platform」的 V1.1 Release,挑選合適鏡像站下載。
  4. 將 ZIP 下載至本地暫存目錄,解壓縮。

Eclipse RAP 主頁 Eclipse RAP 下載頁面

設定目標平台

  1. 開啟 Eclipse Ganymede,確保工作空間指向第 1 部分備忘記事本專案位置,切換至 Plug-in Development 透視圖。
  2. 開啟 Preferences(Windows: Window > Preferences;Mac: Eclipse > Preferences)。
  3. 瀏覽至 Plug-in Development > Target Platform。
  4. 將 Location 欄位改為解壓縮目錄,點擊 Reload。

指定目標平台 把目標平台設為 RAP

此操作載入 RAP 相關外掛,將目標平台從 RCP 切換為 RAP。現可開始修改備忘記事本使用 RAP。

從 RCP 遷移至 RAP

透過遷移過程體會兩環境差異。

透過錯誤發現差異

切換目標平台後,Eclipse 標示備忘記事本程式碼有錯誤(見圖 6)。原因在於既有專案原為 RCP 設計,切換目標後建構路徑缺少解析特定元素的外掛。部分外掛在 RAP 有對應等效項,部分則無,需微調才能通過編譯。

切換到 RAP 後備忘記事本出現編譯器錯誤

調整外掛相依性

  1. 在 Dependencies 視窗中,高亮 org.eclipse.ui 點擊 Remove 移除。
  2. 同位置點擊 Add 選擇 org.eclipse.rap.ui(RAP 對應外掛)。

刪除不需要的外掛 把 RAP 外掛添加到專案中

此步驟解決大部分編譯錯誤。逐一處理剩餘錯誤:

修正程式碼錯誤

1. Shell 建構子
編輯 PersonalTaskViewer.java。RCP 中預設無參數建構子可建立 Shell,RAP 需顯式指定無樣式/顯示:
Shell shell = new Shell(); → Shell shell = new Shell(SWT.NONE);

2. 移除 SWT.HIDE_SELECTION
RAP 的 SWT 實作不含 SWT.HIDE_SELECTION,直接刪除參考。

刪除 SWT.HIDE_SELECTION 屬性

3. 移除 CellEditor 參考
RAP 的 JFace 不支援 CellEditor,搜尋並刪除所有參考,例如在 createTableViewer 方法中:

/** 建立 TableViewer */
private void createTableViewer() {
    tableViewer = new TableViewer(table);
    tableViewer.setUseHashlookup(true);
    tableViewer.setColumnProperties(columnNames);
    tableViewer.setSorter(new PersonalTaskSorter(PersonalTaskSorter.TASK_DESC));
}

因不再有 CellEditor,可刪除 TaskCellModifier 類別(Package Explorer 中刪除 TaskCellModifier.java)。

編輯 PersonalTaskViewer.java 產生的錯誤 刪除 TaskCellModifier 類

遷移總結

  • 整理 RAP 應用程式外掛相依關係
  • 尋找編譯錯誤並用相容 API/常數修正
  • 修改或移除 RAP 目前不支援的功能(如 CellEditors)

定義入口點

RAP 啟動應用程式方式異於 RCP。RCP 使用 IApplication 介面實作;RAP 對應介面為 IEntryPoint。顧名思義,RAP 識別可啟動應用程式的點,一個應用程式可有多個入口點(各由唯一識別碼區分,作為啟動 URL 參數傳遞,如 <host>:<port>/rap?startup=<entrypointname>)。

EntryPoint 代表 RAP 應用程式主入口點,類比 SWT 應用程式的 main() 方法。在 WorkbenchAdvisor、Initial Perspective、ApplicationActionBarAdvisor 協助下建立 UI。

新增 EntryPoint 擴充點

  1. 打開 plugin.xml 切換至 Extensions 分頁(見圖 12)。
  2. 點擊 Add 尋找 org.eclipse.rap.ui.entrypoint。
  3. 完成後設定屬性:class 欄位要求實作 IEntryPoint 的 Java 類別。在編輯器中重新命名為 POEntryPoint 並點擊 class 超連結建立新類別(見圖 15)。

為 RAP 應用程序添加 EntryPoint 選擇 EntryPoint 擴展 設置 EntryPoint 屬性 通過 New Java Class 向導創建 IEntryPoint 實現

IEntryPoint 實作

向導建立實作 IEntryPoint 的 POEntryPoint 類別,定義 RAP 應用程式基本生命週期:

package com.devworks.tutorial.po;

import org.eclipse.rwt.lifecycle.IEntryPoint;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.WorkbenchAdvisor;

public class POEntryPoint implements IEntryPoint {

    public POEntryPoint() {}

    public int createUI() {
        Display display = PlatformUI.createDisplay();
        WorkbenchAdvisor advisor = new ApplicationWorkbenchAdvisor();
        return PlatformUI.createAndRunWorkbench(display, advisor);
    }
}

createUI() 負責建立 Display 與 WorkbenchAdvisor,傳遞給 Workbench 執行。

建立啟動配置

從 Eclipse 內啟動應用程式需定義啟動配置。建議建立配置並隨專案保存以便重用。

  1. 在 Package Explorer 中 com.devworks.tutorial.po 下建立 launch 目錄。
  2. 選單 Run > Run Configuration 選擇 OSGi Framework,命名為 PO_RAP_OSGI。

創建 launch 目錄 創建啟動配置

Equinox OSGi 框架符合 OSGi Core Framework R4 規範,包含啟動程式、引導結構與應用程式模型。RAP 使用 OSGi 作為伺服器端框架,需用 OSGi 框架啟動確保正常運行。(亦可用 RAP Launcher,但 OSGi Launcher 能確保在 Equinox 上運行的應用也能在 Servlet 容器中透過 Equinox 運行,本教程採用此方式。)

下一部分將示範如何配置 Jetty、運行應用程式、恢復編輯功能、品牌化、主題化與打包部署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved