將 WebLogic Server 應用程式遷移至 Azure App 服務 上的 JBoss EAP

本指南說明當您想要移轉現有的 WebLogic Server 應用程式以使用 JBoss EAP 在 Azure App 服務 上執行時,應該注意的事項。

移轉前

若要確保成功移轉,請先完成下列各節所述的評量和清查步驟。

如果您無法符合上述任何移轉前需求,請參閱將應用程式移轉至 虛擬機器的隨附移轉指南:將WebLogic Server 應用程式移轉至 Azure 虛擬機器

清查伺服器容量

記錄目前生產伺服器的硬體(記憶體、CPU、磁碟),以及平均和尖峰要求計數和資源使用率。 無論您選擇的移轉路徑為何,您都需要此資訊。 例如,協助引導選取 App Service 方案很有用。

可用的 App Service 方案層 清單會顯示記憶體、CPU 核心、記憶體和定價資訊。 請注意,App Service 上的 JBoss EAP 僅適用於 進階版 V3隔離 V2 App Service 方案層。

清查所有秘密

在 Azure 金鑰保存庫 等「設定即服務」技術出現之前,沒有定義完善的「秘密」概念。 相反地,您有一組不同的組態設定,實際上可作為我們現在所謂的「秘密」功能。 使用 WebLogic Server 之類的應用程式伺服器,這些秘密位於許多不同的組態檔和組態存放區中。 檢查生產伺服器上的所有屬性和組態檔是否有任何秘密和密碼。 請務必檢查 WAR 中的 weblogic.xml 。 您也可以在應用程式內找到包含密碼或認證的組態檔。 如需詳細資訊,請參閱 Azure 金鑰保存庫 基本概念

清查所有憑證

記錄用於公用 SSL 端點的所有憑證。 您可以執行下列命令來檢視生產伺服器上的所有憑證:

keytool -list -v -keystore <path to keystore>

清查 JNDI 資源

清查所有 JNDI 資源。 例如,資料庫之類的數據源可能會有相關聯的 JNDI 名稱,可讓 JPA 正確地將 的 EntityManager 實例系結至特定資料庫。 如需 JNDI 資源和資料庫的詳細資訊,請參閱 Oracle 檔中的 WebLogic Server 數據源 。 其他 JNDI 相關資源,例如 JMS 訊息代理程式,可能需要移轉或重新設定。 如需 JMS 設定的詳細資訊,請參閱 Oracle WebLogic Server 12.2.1.4.0

檢查您的網域設定

WebLogic Server 中的主要組態單位是網域。 因此, config.xml 檔案包含大量組態,您必須仔細考慮進行移轉。 檔案包含儲存在子目錄中之其他 XML 檔案的參考。 Oracle 建議您通常應該使用 管理員 istration Console 來設定 WebLogic Server 的可管理對象和服務,並允許 WebLogic Server 維護 config.xml 檔案。 如需詳細資訊,請參閱 網域組態檔

在您的應用程式內

檢查 WEB-INF/weblogic.xml 檔案和/或 WEB-INF/web.xml 檔案。

判斷是否使用會話複寫

如果您的應用程式依賴會話復寫,且具有或不含 Oracle 一致性*Web,您有兩個選項:

  • 重構您的應用程式以使用資料庫進行會話管理。
  • 重構您的應用程式,以將會話外部化至 Azure Redis 服務。 如需詳細資訊,請參閱 Azure Cache for Redis

對於所有這些選項,最好掌握 WebLogic 如何執行 HTTP 會話狀態複寫。 如需詳細資訊,請參閱 Oracle 檔中的 HTTP 工作階段狀態複 寫。

檔數據源

如果您的應用程式使用任何資料庫,您需要擷取下列資訊:

  • 數據源名稱為何?
  • 什麼是聯機集區設定?
  • 哪裡可以找到 JDBC 驅動程式 JAR 檔案?

如需 WebLogic 中 JDBC 驅動程式的詳細資訊,請參閱 搭配 WebLogic Server 使用 JDBC 驅動程式。

判斷 WebLogic 是否已自定義

判斷已進行下列哪一項自定義,並擷取已完成的工作。

  • 啟動文稿是否已變更? 這類腳本包括 setDomainEnvcommEnvstartWebLogic 和 stopWebLogic
  • 是否有任何特定參數傳遞至 JVM?
  • 是否有 JAR 新增至伺服器類別路徑?

判斷是否需要連線至內部部署

如果您的應用程式需要存取任何內部部署服務,您必須布建其中一個 Azure 的連線服務。 如需詳細資訊,請參閱 選擇將內部部署網路連線至 Azure 的解決方案。 或者,您必須重構應用程式,才能使用內部部署資源公開的公開可用 API。

判斷 Java 訊息服務 (JMS) 佇列或主題是否正在使用中

如果您的應用程式使用 JMS 佇列或主題,您必須將它們移轉至外部裝載的 JMS 伺服器。 Azure 服務匯流排 和進階消息佇列通訊協定 (AMQP) 對於使用 JMS 的通訊協定而言,是絕佳的移轉策略。 如需詳細資訊,請參閱搭配 Azure 服務匯流排 和AMQP 1.0使用 JMS。

如果已設定 JMS 永續性存放區,您必須擷取其設定,並在移轉之後套用它。

判斷您是否使用自己的自定義建立共用Java EE 連結庫

如果您使用共用 Java EE 連結函式庫功能,您有兩個選項:

  • 重構應用程式程式代碼以移除連結庫上的所有相依性,並改為將功能直接併入您的應用程式。
  • 將連結庫新增至伺服器類別路徑。

判斷是否使用OSGi套件組合

如果您使用新增至 WebLogic 伺服器的 OSGi 套件組合,則必須將相等的 JAR 檔案直接新增至 Web 應用程式。

判斷您的應用程式是否包含 OS 特定程式代碼

如果您的應用程式包含主機 OS 上具有相依性的任何程式代碼,則必須重構它以移除這些相依性。 例如,您可能需要以 或 \ 取代檔案系統路徑File.Separator中的任何 使用 /Paths.get

判斷 Oracle 服務匯流排 是否正在使用中

如果您的應用程式使用 Oracle 服務匯流排 (OSB),您必須擷取 OSB 的設定方式。 如需詳細資訊,請參閱關於 Oracle 服務匯流排 安裝

判斷您的應用程式是否由多個 WAR 組成

如果您的應用程式是由多個 WAR 所組成,您應該將每個 WAR 視為個別的應用程式,並針對每個 WAR 進行本指南。

判斷您的應用程式是否封裝為 EAR

如果您的應用程式封裝為 EAR 檔案,請務必檢查 application.xmlweblogic-application.xml 檔案,並擷取其組態。

識別在生產伺服器上執行的所有外部進程和精靈

如果您有在應用程式伺服器外部執行的任何進程,例如監視精靈,您必須將其消除或移轉至別處。

驗證支援的 Java 版本是否正常運作

Azure App 服務 上的 JBoss EAP 支援 Java 8 和 11。 因此,您必須驗證應用程式是否能夠使用該支援的版本正確執行。 如果您的目前伺服器使用支援的 JDK(例如 Oracle JDK 或 IBM OpenJ9),這項驗證特別重要。

若要取得目前的 Java 版本,請登入您的生產伺服器,然後執行下列命令:

java -version

判斷您的應用程式是否依賴排程的作業

排程的作業,例如[矽排程器工作] 或 [Unix cron] 工作,不應該與 Azure App 服務 搭配使用。 Azure App 服務 不會防止您在內部部署包含排程工作的應用程式。 不過,如果您的應用程式相應放大,則每個排程期間,相同的排程工作可能會執行多次。 這種情況可能會導致非預期的後果。

若要在 Azure 上執行排程的工作,請考慮搭配定時器觸發程式使用 Azure Functions。 如需詳細資訊,請參閱 Azure Functions 的定時器觸發程式。 您不需要將作業程式代碼本身移轉至函式。 函式可以直接叫用應用程式中的URL來觸發作業。

注意

若要防止惡意使用,您可能需要確保作業調用端點需要認證。 在此情況下,觸發程式函式必須提供認證。

判斷是否使用 WebLogic 文稿工具 (WLST)

如果您目前使用WLST來執行部署,則必須評估其運作狀況。 如果 WLST 正在變更應用程式的任何 (執行時間) 參數作為部署的一部分,您必須確定這些參數符合下列其中一個選項:

  • 它們會外部化為應用程式設定。
  • 它們內嵌在您的應用程式中。
  • 他們在部署期間使用 JBoss CLI。

如果WLST執行的動作超過上述內容,則移轉期間將有一些額外的工作要做。

判斷您的應用程式是否使用 WebLogic 特定 API

如果您的應用程式使用 WebLogic 特定的 API,您必須重構應用程式,使其無法使用。 例如,如果您已使用 Oracle WebLogic Server 的 Java API 參考中所述的類別,則已在應用程式中使用 WebLogic 特定的 API。 Red Hat Migration Toolkit for Apps 可協助移除和重構這些相依性。

判斷您的應用程式是否使用 Entity Beans 或 EJB 2.x 樣式 CMP Beans

如果您的應用程式使用 Entity Beans 或 EJB 2.x 樣式 CMP bean,您必須重構應用程式,使其無法使用。

判斷是否使用 Java EE 應用程式用戶端應用程式功能

如果您有使用 Java EE 應用程式用戶端應用程式用戶端功能連線到您的 (server) 應用程式,則必須重構用戶端應用程式和 (伺服器) 應用程式,才能使用 HTTP API。

判斷是否已使用部署計劃

如果使用部署計劃來執行部署,您必須評估部署計劃正在執行的作業。 如果部署計劃是直接部署,您將能夠在不進行任何變更的情況下部署Web應用程式。 如果部署計劃更詳細,您必須判斷您是否可以使用 JBoss CLI 正確設定應用程式作為部署的一部分。 如果無法使用 JBoss CLI,您必須以不再需要部署計畫的方式來重構應用程式。

判斷EJB定時器是否正在使用中

如果您的應用程式使用 EJB 定時器,您必須驗證每個 JBoss EAP 實例都可以獨立觸發 EJB 定時器程式代碼。 此驗證是必要的,因為當您的 App Service 水平調整時,每個 EJB 定時器都會在其自己的 JBoss EAP 實例上觸發。

驗證文件系統的使用方式和方式

應用程式伺服器上的檔案系統使用方式都需要重新設定,或在某些情況下,架構變更。 檔案系統可由 WebLogic 共用模組或您的應用程式程式代碼使用。 您可以識別下列部分或所有案例。

唯讀靜態內容

如果您的應用程式目前提供靜態內容,則需要該靜態內容的替代位置。 您可能想要考慮將靜態內容移至 Azure Blob 儲存體,並新增 Azure CDN 以進行全球快速下載。

動態發佈的靜態內容

如果您的應用程式允許應用程式上傳/產生的靜態內容,但在應用程式建立後是不可變的,您可以使用如上所述 Azure Blob 儲存體 和 Azure CDN,搭配 Azure 函式來處理上傳和 CDN 重新整理。 我們已提供 範例實作以供您使用

動態或內部內容

對於應用程式經常寫入和讀取的檔案(例如暫存數據檔),或只有應用程式可見的靜態檔案,Azure 儲存體 可以掛接至 App Service 檔案系統

判斷是否使用 JCA 連接器

如果您的應用程式使用 JCA 連接器,您必須驗證 JCA 連接器可用於 JBoss EAP。 如果 JCA 實作系結至 WebLogic,您必須將應用程式重構為 NOT 使用 JCA 連接器。 如果可以使用,則必須將 JAR 新增至伺服器類別路徑,並將必要的組態檔放在 JBoss EAP 伺服器目錄中的正確位置,以供使用。

判斷您的應用程式是否使用資源配接器

如果您的應用程式需要資源配接器 (RA),它必須與 JBoss EAP 相容。 藉由將RA部署到伺服器並正確設定,判斷RA是否可在 JBoss EAP 的獨立實例上正常運作。 如果 RA 正常運作,您必須將 JAR 新增至 App Service 實例的伺服器類別路徑,並將必要的組態檔放在 JBoss EAP 伺服器目錄中的正確位置,以供使用。

判斷是否使用 JAAS

如果您的應用程式使用 JAAS,則必須擷取 JAAS 的設定方式。 如果使用資料庫,您可以將它轉換成 JBoss EAP 上的 JAAS 網域。 如果是自定義實作,您必須驗證它是否可以在 JBoss EAP 上使用。

判斷是否使用 WebLogic 叢集

您很可能已在多個 WebLogic 伺服器上部署應用程式,以達到高可用性。 Azure App 服務 能夠調整,但如果您已使用 WebLogic 叢集 API,則必須重構程式代碼,以避免使用該 API。

遷移

Red Hat Migration Toolkit for Apps

Red Hat Migration Toolkit for Applications 是 Visual Studio Code 的免費擴充功能。 此延伸模組會分析您的應用程式程式代碼和設定,以提供從其他應用程式伺服器將 Jakarta EE 應用程式移轉至 JBoss EAP 的建議,例如移除專屬 API 的相依性。 如果您要從內部部署移轉至雲端,擴充功能也會提供建議。 如需詳細資訊,請參閱 移轉工具組 for Applications 概觀

本指南的內容將協助您解決移轉旅程的其他元件,例如選擇正確的 App Service 方案類型、將會話狀態外部化,以及使用 Azure 來管理 EAP 實例,而不是 JBoss 管理介面。

佈建 App Service 方案

從可用的服務方案清單中,選取其規格符合或超過目前生產硬體規格的計劃。

注意

如果您打算執行預備/Canary 部署或使用 部署位置,App Service 方案必須包含該額外的容量。 我們建議針對 Java 應用程式使用 進階版 或更高方案。

建立 App Service 方案

建立及部署 Web 應用程式(s)

您必須針對部署至 JBoss EAP 伺服器的每個 WAR 檔案,在您的 App Service 方案上建立 Web 應用程式。

注意

雖然可以將多個 WAR 檔案部署到單一 Web 應用程式,但這是極不想要的。 將多個 WAR 檔案部署到單一 Web 應用程式,可防止每個應用程式根據自己的使用量需求進行調整。 它也會增加後續部署管線的複雜性。 如果需要在單一 URL 上使用多個應用程式,請考慮使用路由解決方案,例如 Azure 應用程式閘道

Maven 應用程式

如果您的應用程式是從 Maven POM 檔案建置的,請使用適用於 Maven 的 Webapp 外掛程式來建立 Web 應用程式並部署您的應用程式。 如需詳細資訊,請參閱快速入門:在 Azure App 服務 上建立 Java 應用程式一節的設定 Maven 外掛程式一節。

非 Maven 應用程式

如果您無法使用 Maven 外掛程式,則必須透過其他機制布建 Web 應用程式,例如:

建立 Web 應用程式之後,請使用其中一個可用的部署機制來部署您的應用程式。 如需詳細資訊,請參閱將檔案部署至 App Service

移轉 JVM 執行時間選項

如果您的應用程式需要特定的運行時間選項,請使用最適當的機制來指定它們。 如需詳細資訊,請參閱設定適用於 Azure App 服務的 Java 應用程式設定 Java 執行時間選項一節。

移轉外部化參數

如果您需要使用外部參數,您必須將它們設定為應用程式設定。 如需詳細資訊,請參閱 設定應用程式設定

移轉啟動腳本

如果原始應用程式使用自定義啟動文本,您必須將其移轉至Bash腳本。 如需詳細資訊,請參閱 自定義應用程式伺服器組態

填入秘密

使用應用程式 設定 來儲存應用程式特有的任何秘密。 如果您想要在多個應用程式之間使用相同的秘密或秘密,或需要精細的存取原則和稽核功能,請改用 Azure 金鑰保存庫 參考。 如需詳細資訊,請參閱設定適用於 Azure App 服務 的 Java 應用程式使用 KeyVault 參考一節。

設定自訂網域和 SSL

如果您的應用程式將在自定義網域上顯示,您必須將 Web 應用程式對應至它。 如需詳細資訊,請參閱教學課程:將現有的自定義 DNS 名稱對應至 Azure App 服務

接著,您必須將該網域的 TLS/SSL 憑證系結至 App Service Web 應用程式。 如需詳細資訊,請參閱在 Azure App 服務 中使用 TLS/SSL 系結保護自定義 DNS 名稱。

移轉數據源、連結庫和 JNDI 資源

若要移轉數據源,請遵循設定java應用程式以進行Azure App 服務設定數據源一節中的步驟。

遵循設定java應用程式以進行 Azure App 服務的 JBoss EAP 一節中的指示,移轉任何其他伺服器層級的 Classpath 相依性。

移轉任何其他共用伺服器層級 JDNI 資源。 如需詳細資訊,請參閱為 Azure App 服務 設定 Java 應用程式的 JBoss EAP 一節。

移轉 JCA 連接器和 JAAS 模組

遵循安裝模組和相依性的指示,移轉任何 JCA 連接器和 JAAS 模組。

注意

如果您遵循每個應用程式一個 WAR 的建議架構,請考慮將伺服器層級的 Classpath 連結庫和 JNDI 資源移轉至您的應用程式。 這麼做可大幅簡化元件控管和變更管理。 如果您想要為每個應用程式部署一個以上的 WAR,您應該檢閱本指南開頭所述的其中一個隨附指南。

移轉排程的工作

您至少應該將排程的作業移至 Azure VM,使其不再屬於您的應用程式。 或者,您可以選擇使用 Azure Functions、SQL 資料庫 和事件中樞等 Azure 服務,將其現代化為事件驅動 Java。

重新啟動和抽煙測試

最後,您必須重新啟動 Web 應用程式,以套用所有設定變更。 重新啟動完成後,請確認您的應用程式正在正確執行。

移轉後

既然您已將應用程式移轉至 Azure App 服務,您應該確認它如預期般運作。 完成之後,我們有一些建議可讓您的應用程式更雲端原生。

建議